diff options
author | jofret | 2008-11-27 15:10:42 +0000 |
---|---|---|
committer | jofret | 2008-11-27 15:10:42 +0000 |
commit | 602b6a9a6598265a59bf2c23da1f08ac13e3252e (patch) | |
tree | b7b650335ecab8b54907bf59694575b710abd5d1 /src/elementaryFunctions/asin | |
parent | a53ec9cba50352f88593aede499c20f28831e2bd (diff) | |
download | scilab2c-602b6a9a6598265a59bf2c23da1f08ac13e3252e.tar.gz scilab2c-602b6a9a6598265a59bf2c23da1f08ac13e3252e.tar.bz2 scilab2c-602b6a9a6598265a59bf2c23da1f08ac13e3252e.zip |
Correct asin BUG
Diffstat (limited to 'src/elementaryFunctions/asin')
-rw-r--r-- | src/elementaryFunctions/asin/casins.c | 4 | ||||
-rw-r--r-- | src/elementaryFunctions/asin/testDoubleAsin.c | 5 | ||||
-rw-r--r-- | src/elementaryFunctions/asin/zasins.c | 4 |
3 files changed, 6 insertions, 7 deletions
diff --git a/src/elementaryFunctions/asin/casins.c b/src/elementaryFunctions/asin/casins.c index 957dd8b4..9c15ce53 100644 --- a/src/elementaryFunctions/asin/casins.c +++ b/src/elementaryFunctions/asin/casins.c @@ -79,12 +79,12 @@ floatComplex casins(floatComplex z) { if(dblAbsReal < 1) /* Am1 = 0.5d0*((y**2)/(R+(x+1.d0))+(y**2)/(S+(1.d0-x))) */ - dblImg1 = 0.5f * (dblAbsImg * dblAbsImg / (dblR + (dblAbsReal + 1)) + dblAbsImg * dblAbsImg / (dblS + (dblAbsReal - 1))); + dblImg1 = 0.5f * (dblAbsImg * dblAbsImg / (dblR + (dblAbsReal + 1)) + dblAbsImg * dblAbsImg / (dblS + (1 - dblAbsReal))); else /* Am1 = 0.5d0*((y**2)/(R+(x+1.d0))+(S+(x-1.d0))) */ dblImg1 = 0.5f * (dblAbsImg * dblAbsImg / (dblR + (dblAbsReal + 1)) + (dblS + (dblAbsReal - 1))); /* ai = logp1(Am1 + sqrt(Am1*(A+1.d0))) */ - dblTemp = dblImg1 + ssqrts(dblImg1 * dblA + 1); + dblTemp = dblImg1 + ssqrts(dblImg1 * (dblA + 1)); _pdblImg = slog1ps(dblTemp); } else diff --git a/src/elementaryFunctions/asin/testDoubleAsin.c b/src/elementaryFunctions/asin/testDoubleAsin.c index f82716e3..e35633f1 100644 --- a/src/elementaryFunctions/asin/testDoubleAsin.c +++ b/src/elementaryFunctions/asin/testDoubleAsin.c @@ -445,9 +445,8 @@ void zasinsTest(void) { for (i=0;i<200;i++){ in = DoubleComplex(inR[i],inI[i]); out=zasins(in); - printf("%d - %f - erreur %f\n",i,zimags(out),(fabs(zimags(out)-resI[i])) / (fabs(zimags(out)))); assert( ( (fabs(zreals(out)-resR[i])) / (fabs(zreals(out))) ) <1e-15); - assert( ( (fabs(zimags(out)-resI[i])) / (fabs(zimags(out))) ) <1e-1); + assert( ( (fabs(zimags(out)-resI[i])) / (fabs(zimags(out))) ) <1e-15); } } @@ -456,7 +455,7 @@ void dasinaTest(void) { double res[]= RESULT; double out[200]; int i=0; - + dasina(in,200,out); for (i=0;i<200;i++){ assert( ( (fabs(out[i]-res[i])) / (fabs(out[i])) ) <1e-15); diff --git a/src/elementaryFunctions/asin/zasins.c b/src/elementaryFunctions/asin/zasins.c index 19bce55b..5d2110ff 100644 --- a/src/elementaryFunctions/asin/zasins.c +++ b/src/elementaryFunctions/asin/zasins.c @@ -79,12 +79,12 @@ doubleComplex zasins(doubleComplex z) { if(dblAbsReal < 1) /* Am1 = 0.5d0*((y**2)/(R+(x+1.d0))+(y**2)/(S+(1.d0-x))) */ - dblImg1 = 0.5 * (dblAbsImg * dblAbsImg / (dblR + (dblAbsReal + 1)) + dblAbsImg * dblAbsImg / (dblS + (dblAbsReal - 1))); + dblImg1 = 0.5 * (dblAbsImg * dblAbsImg / (dblR + (dblAbsReal + 1)) + dblAbsImg * dblAbsImg / (dblS + (1 - dblAbsReal))); else /* Am1 = 0.5d0*((y**2)/(R+(x+1.d0))+(S+(x-1.d0))) */ dblImg1 = 0.5 * (dblAbsImg * dblAbsImg / (dblR + (dblAbsReal + 1)) + (dblS + (dblAbsReal - 1))); /* ai = logp1(Am1 + sqrt(Am1*(A+1.d0))) */ - dblTemp = dblImg1 + dsqrts(dblImg1 * dblA + 1); + dblTemp = dblImg1 + dsqrts(dblImg1 * (dblA + 1)); _pdblImg = dlog1ps(dblTemp); } else |