diff --git a/src/frontend/measure.c b/src/frontend/measure.c index e4e309276..79f3dc238 100644 --- a/src/frontend/measure.c +++ b/src/frontend/measure.c @@ -1,4 +1,3 @@ -#include #include #include "ngspice.h" #include "cpdefs.h" @@ -8,29 +7,12 @@ #include "rawfile.h" #include "variable.h" #include "numparam/numpaif.h" +#include "missing_math.h" static bool measure_valid[20000]; static bool just_chk_meas; static bool measures_passed; -// Initial AlmostEqualULPs version - fast and simple, but -// some limitations. -static bool AlmostEqualUlps(float A, float B, int maxUlps) -{ - int intDiff; - assert(sizeof(float) == sizeof(int)); - - if (A == B) - return TRUE; - - intDiff = abs(*(int*)&A - *(int*)&B); - - if (intDiff <= maxUlps) - return TRUE; - - return FALSE; -} - static double max( double a, double b ) { if ( a > b ) return a; diff --git a/src/include/missing_math.h b/src/include/missing_math.h index 80727a82d..fb7009ba8 100644 --- a/src/include/missing_math.h +++ b/src/include/missing_math.h @@ -5,6 +5,10 @@ Copyright 1999 Emmanuel Rouat /* Decl. for missing maths functions, if any */ +#ifndef MISSING_MATH_H_INCLUDED +#define MISSING_MATH_H_INCLUDED + +bool AlmostEqualUlps(float, float, int); #ifndef HAVE_ERFC extern double erfc(double); @@ -23,3 +27,5 @@ extern double scalb(double, int); #ifndef HAVE_ISNAN extern int isnan(double); #endif + +#endif /* MISSING_MATH_H_INCLUDED */ diff --git a/src/misc/missing_math.c b/src/misc/missing_math.c index 4aefa8a81..2566f8695 100644 --- a/src/misc/missing_math.c +++ b/src/misc/missing_math.c @@ -6,12 +6,28 @@ $Id$ /* * Missing math functions */ -#include +#include +#include "config.h" #include "ngspice.h" -#include #include "missing_math.h" +/* Initial AlmostEqualULPs version - fast and simple, but */ +/* some limitations. */ +bool AlmostEqualUlps(float A, float B, int maxUlps) +{ + int intDiff; + assert(sizeof(float) == sizeof(int)); + if (A == B) + return TRUE; + + intDiff = abs(*(int*)&A - *(int*)&B); + + if (intDiff <= maxUlps) + return TRUE; + + return FALSE; +} #ifndef HAVE_LOGB diff --git a/src/misc/missing_math.h b/src/misc/missing_math.h index cd8e03a72..6b479d37b 100644 --- a/src/misc/missing_math.h +++ b/src/misc/missing_math.h @@ -6,6 +6,8 @@ #ifndef MISSING_MATH_H_INCLUDED #define MISSING_MATH_H_INCLUDED +bool AlmostEqualUlps(float, float, int); + #ifndef HAVE_ERFC double erfc(double); #endif @@ -21,7 +23,7 @@ double scalb(double, int); #endif #ifndef HAVE_ISNAN -int isnan(double value); -#endif /* HAVE_ISNAN */ +int isnan(double); +#endif #endif /* MISSING_MATH_H_INCLUDED */ diff --git a/src/spicelib/analysis/dctran.c b/src/spicelib/analysis/dctran.c index 0f14b32ae..6972f6676 100644 --- a/src/spicelib/analysis/dctran.c +++ b/src/spicelib/analysis/dctran.c @@ -7,21 +7,19 @@ Modified: 2000 AlansFixes /* subroutine to do DC TRANSIENT analysis --- ONLY, unlike spice2 routine with the same name! */ -#include -#include -#include -#include -#include -#include -#include +#include "ngspice.h" +#include "config.h" +#include "cktdefs.h" +#include "cktaccept.h" +#include "trandefs.h" +#include "sperror.h" #include "fteext.h" +#include "missing_math.h" #ifdef XSPICE /* gtri - add - wbk - Add headers */ #include "miftypes.h" -/* gtri - end - wbk - Add headers */ -/* gtri - add - wbk - Add headers */ #include "evt.h" #include "mif.h" #include "evtproto.h" @@ -37,24 +35,6 @@ Modified: 2000 AlansFixes void SetAnalyse( char * Analyse, int Percent); #endif -// Initial AlmostEqualULPs version - fast and simple, but -// some limitations. -static bool AlmostEqualUlps(float A, float B, int maxUlps) -{ - int intDiff; - assert(sizeof(float) == sizeof(int)); - - if (A == B) - return TRUE; - - intDiff = abs(*(int*)&A - *(int*)&B); - - if (intDiff <= maxUlps) - return TRUE; - - return FALSE; -} - int DCtran(CKTcircuit *ckt, int restart) /* forced restart flag */ diff --git a/src/spicelib/devices/res/resparam.c b/src/spicelib/devices/res/resparam.c index 9b80dae21..8e6ce4263 100644 --- a/src/spicelib/devices/res/resparam.c +++ b/src/spicelib/devices/res/resparam.c @@ -4,30 +4,12 @@ Author: 1985 Thomas L. Quarles Modified: Apr 2000 - Paolo Nenzi **********/ -#include #include "ngspice.h" #include "const.h" #include "ifsim.h" #include "resdefs.h" #include "sperror.h" - -// Initial AlmostEqualULPs version - fast and simple, but -// some limitations. -static bool AlmostEqualUlps(float A, float B, int maxUlps) -{ - int intDiff; - assert(sizeof(float) == sizeof(int)); - - if (A == B) - return TRUE; - - intDiff = abs(*(int*)&A - *(int*)&B); - - if (intDiff <= maxUlps) - return TRUE; - - return FALSE; -} +#include "missing_math.h" int RESparam(int param, IFvalue *value, GENinstance *inst, IFvalue *select) diff --git a/src/spicelib/devices/vsrc/vsrcacct.c b/src/spicelib/devices/vsrc/vsrcacct.c index 5e73f8303..c74adbc1d 100644 --- a/src/spicelib/devices/vsrc/vsrcacct.c +++ b/src/spicelib/devices/vsrc/vsrcacct.c @@ -3,35 +3,16 @@ Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles **********/ -#include #include "ngspice.h" #include "cktdefs.h" #include "vsrcdefs.h" #include "trandefs.h" #include "sperror.h" #include "suffix.h" +#include "missing_math.h" #define SAMETIME(a,b) (fabs((a)-(b))<= TIMETOL * PW) #define TIMETOL 1e-7 - -// Initial AlmostEqualULPs version - fast and simple, but -// some limitations. -static bool AlmostEqualUlps(float A, float B, int maxUlps) -{ - int intDiff; - assert(sizeof(float) == sizeof(int)); - - if (A == B) - return TRUE; - - intDiff = abs(*(int*)&A - *(int*)&B); - - if (intDiff <= maxUlps) - return TRUE; - - return FALSE; -} - int VSRCaccept(CKTcircuit *ckt, GENmodel *inModel) @@ -101,12 +82,8 @@ VSRCaccept(CKTcircuit *ckt, GENmodel *inModel) #endif /* gtri - end - wbk - add PHASE parameter */ - time = ckt->CKTtime - TD; - - - - + if(time >= PER) { /* repeating signal - figure out where we are */ /* in period */ @@ -190,8 +167,8 @@ VSRCaccept(CKTcircuit *ckt, GENmodel *inModel) } } for(i=0;i<(here->VSRCfunctionOrder/2)-1;i++) { - //if((*(here->VSRCcoeffs+2*i)==ckt->CKTtime)) { - // if(ckt->CKTbreak) { +/* if((*(here->VSRCcoeffs+2*i)==ckt->CKTtime)) { + if(ckt->CKTbreak) {*/ if ( ckt->CKTbreak && AlmostEqualUlps(*(here->VSRCcoeffs+2*i), ckt->CKTtime, 3 ) ) { error = CKTsetBreak(ckt, *(here->VSRCcoeffs+2*i+2)); if(error) return(error);