summaryrefslogtreecommitdiff
path: root/src/elementaryFunctions/asin
diff options
context:
space:
mode:
authorjofret2008-11-27 15:10:42 +0000
committerjofret2008-11-27 15:10:42 +0000
commit602b6a9a6598265a59bf2c23da1f08ac13e3252e (patch)
treeb7b650335ecab8b54907bf59694575b710abd5d1 /src/elementaryFunctions/asin
parenta53ec9cba50352f88593aede499c20f28831e2bd (diff)
downloadscilab2c-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.c4
-rw-r--r--src/elementaryFunctions/asin/testDoubleAsin.c5
-rw-r--r--src/elementaryFunctions/asin/zasins.c4
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