From 36aaaafae4437dda5664c99b3497976fecb642fa Mon Sep 17 00:00:00 2001 From: nkshigeru Date: Wed, 16 May 2012 15:14:23 +0900 Subject: fix for MSVC move declaration in the middle no signbit --- src/math.c | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/src/math.c b/src/math.c index c6f412055..a4451ea9d 100644 --- a/src/math.c +++ b/src/math.c @@ -17,6 +17,10 @@ #define atanh(x) (log(1+x) - log(1-x))/2.0 #define cbrt(x) pow(x,1.0/3.0) +/* Declaration of complementary Error function */ +double +erfc(double x); + /* ** Implementations of error functions ** credits to http://www.digitalmars.com/archives/cplusplus/3634.html @@ -27,11 +31,11 @@ double erf(double x) { static const double two_sqrtpi= 1.128379167095512574; + double sum= x, term= x, xsqr= x*x; + int j= 1; if (fabs(x) > 2.2) { return 1.0 - erfc(x); } - double sum= x, term= x, xsqr= x*x; - int j= 1; do { term*= xsqr/j; sum-= term/(2*j+1); @@ -48,16 +52,16 @@ double erfc(double x) { static const double one_sqrtpi= 0.564189583547756287; + double a=1, b=x; + double c=x, d=x*x+0.5; + double q1,q2; + double n= 1.0, t; if (fabs(x) < 2.2) { return 1.0 - erf(x); } - if (signbit(x)) { + if (x < 0.0) { /*signbit(x)*/ return 2.0 - erfc(-x); } - double a=1, b=x; - double c=x, d=x*x+0.5; - double q1,q2; - double n= 1.0, t; do { t= a*n+b*x; a= b; -- cgit v1.2.3