From 531bfe168b5ca831ba368ff43b20786a13581520 Mon Sep 17 00:00:00 2001 From: Norayr Chilingarian Date: Tue, 6 Oct 2026 20:14:42 +0400 Subject: [PATCH] fixing Math, MathL and the ooc real math sincos took cos as sqrt(1 - sin*sin): its sign was lost and it was 0 near pi/2 (tan(pi/2) gave large, tan(-pi) the wrong sign); REAL tan and sin/cos reduced in LONGREAL with REAL pi and pi/2; REAL arcsin and arccos returned their unadjusted value after any earlier error (err stays set). in oocLowReal, scale, intpart, trunc and round treated a REAL as a 64 bit SET (RealMath.sqrt(2) was about 1E9); now with Reals.SetExpo and ENTIER. LowReal.small and LowLReal.small are the exact constants again. the math test expects the right values. --- src/library/ooc/oocLRealMath.Mod | 2 +- src/library/ooc/oocLowLReal.Mod | 3 +- src/library/ooc/oocLowReal.Mod | 44 ++++---- src/library/ooc/oocRealMath.Mod | 12 +- src/runtime/Math.Mod | 12 +- src/runtime/MathL.Mod | 2 +- src/test/confidence/math/expected | 182 +++++++++++++++--------------- 7 files changed, 128 insertions(+), 129 deletions(-) diff --git a/src/library/ooc/oocLRealMath.Mod b/src/library/ooc/oocLRealMath.Mod index 552f8c20..48b65bff 100644 --- a/src/library/ooc/oocLRealMath.Mod +++ b/src/library/ooc/oocLRealMath.Mod @@ -360,7 +360,7 @@ END ipower; PROCEDURE sincos* (x: LONGREAL; VAR Sin, Cos: LONGREAL); (* More efficient sin/cos implementation if both values are needed. *) BEGIN - Sin:=sin(x); Cos:=sqrt(ONE-Sin*Sin) + Sin:=sin(x); Cos:=cos(x) (* sqrt(ONE-Sin*Sin) lost the sign of cos and its precision near pi/2 *) END sincos; PROCEDURE arctan2* (xn, xd: LONGREAL): LONGREAL; diff --git a/src/library/ooc/oocLowLReal.Mod b/src/library/ooc/oocLowLReal.Mod index e28e13cf..6a301a07 100644 --- a/src/library/ooc/oocLowLReal.Mod +++ b/src/library/ooc/oocLowLReal.Mod @@ -87,8 +87,7 @@ CONST expoMax*= 1023; expoMin*= 1-expoMax; large*= MAX(LONGREAL); (*1.7976931348623157D+308;*) (* MAX(LONGREAL) *) - (*small*= 2.2250738585072014D-308;*) - small*= 2.2250738585072014/9.9999999999999981D307(*/10^308)*); + small*= 2.2250738585072014D-308; (* 2^(-1022); exact since the compiler converts and writes reals exactly *) IEC559*= TRUE; LIA1*= FALSE; rounds*= FALSE; diff --git a/src/library/ooc/oocLowReal.Mod b/src/library/ooc/oocLowReal.Mod index 5bbd5fb3..e8ddcf07 100644 --- a/src/library/ooc/oocLowReal.Mod +++ b/src/library/ooc/oocLowReal.Mod @@ -84,8 +84,7 @@ CONST expoMax*= 127; expoMin*= 1-expoMax; large*= MAX(REAL);(*3.40282347E+38;*) (* MAX(REAL) *) - (*small*= 1.17549435E-38; (* 2^(-126) *)*) - small* = 1/8.50705917E37; (* don't know better way; -- noch *) + small*= 1.17549435E-38; (* 2^(-126) *) IEC559*= TRUE; LIA1*= FALSE; rounds*= FALSE; @@ -171,12 +170,12 @@ END fraction; PROCEDURE IsInfinity * (real: REAL) : BOOLEAN; BEGIN - RETURN (Reals.Expo(real) = 255) & (S.VAL(SET, real) * {0..22} = {}) + RETURN (Reals.Expo(real) = 255) & (real = real) (* not a NaN *) END IsInfinity; PROCEDURE IsNaN * (real: REAL) : BOOLEAN; BEGIN - RETURN (Reals.Expo(real) = 255) & (S.VAL(SET, real) * {0..22} # {}) + RETURN real # real (* only a NaN differs from itself *) END IsNaN; PROCEDURE sign*(x: REAL): REAL; @@ -195,15 +194,17 @@ PROCEDURE scale*(x: REAL; n: INTEGER): REAL; The value of the call scale(x,n) shall be the value x*radix^n if such a value exists; otherwise an execption shall occur and may be raised. *) - VAR exp: LONGINT; lexp: SET; + VAR exp: LONGINT; BEGIN IF x=ZERO THEN RETURN ZERO END; exp:= exponent(x)+n; (* new exponent *) IF exp>expoMax THEN RETURN large*sign(x) (* exception raised here *) ELSIF exp=0.5 THEN i:=i+ONE END; (* the first dropped bit set: away from zero *) + RETURN scale(i, -k)*sign(x) END END round; diff --git a/src/library/ooc/oocRealMath.Mod b/src/library/ooc/oocRealMath.Mod index 611f1f96..82c750e6 100644 --- a/src/library/ooc/oocRealMath.Mod +++ b/src/library/ooc/oocRealMath.Mod @@ -43,6 +43,8 @@ CONST eps=2.9802322E-8; (* 2**(-MantBits-1) *) piInv=0.31830988618379067154; (* 1/pi *) piByTwo=1.57079632679489661923132; + piByTwoL = 1.57079632679489661923132D0; (* for the reduction of tan in LONGREAL: with the REAL piByTwo, tan(pi/2) was infinite *) + piL = 3.1415926535897932384626433832795028841972D0; (* for the reduction of SinCos in LONGREAL *) piByFour=0.78539816339744830962; lnv=0.6931610107421875; (* should be exact *) vbytwo=0.13830277879601902638E-4; (* used in sinh/cosh *) @@ -84,7 +86,7 @@ BEGIN IF x#y THEN xn:=xn-HALF END; (* fractional part of reduced number *) - f:=SHORT(ABS(LONG(x)) - LONG(xn)*pi); + f:=SHORT(ABS(LONG(x)) - LONG(xn)*piL); (* Pre: |f| <= pi/2 *) IF ABS(f) ONE THEN RETURN res END; (* this call failed; err stays set from any earlier error *) (* adjust result for the correct quadrant *) IF i=1 THEN res:=piByFour+(piByFour+res) END; @@ -283,7 +285,7 @@ VAR res: REAL; i: LONGINT; BEGIN asincos(x, 1, i, res); - IF l.err#0 THEN RETURN res END; + IF ABS(x) > ONE THEN RETURN res END; (* this call failed; err stays set from any earlier error *) (* adjust result for the correct quadrant *) IF x<0 THEN @@ -448,7 +450,7 @@ END ipower; PROCEDURE sincos* (x: REAL; VAR Sin, Cos: REAL); (* More efficient sin/cos implementation if both values are needed. *) BEGIN - Sin:=sin(x); Cos:=sqrt(ONE-Sin*Sin) + Sin:=sin(x); Cos:=cos(x) (* sqrt(ONE-Sin*Sin) lost the sign of cos and its precision near pi/2 *) END sincos; PROCEDURE arctan2* (xn, xd: REAL): REAL; diff --git a/src/runtime/Math.Mod b/src/runtime/Math.Mod index 89707f0f..71075283 100644 --- a/src/runtime/Math.Mod +++ b/src/runtime/Math.Mod @@ -106,6 +106,8 @@ CONST eps = 2.9802322E-8; (* 2 * *( - MantBits - 1) *) piInv = 0.31830988618379067154; (* 1/pi *) piByTwo = 1.57079632679489661923132; + piByTwoL = 1.57079632679489661923132D0; (* for the reduction of tan in LONGREAL: with the REAL piByTwo, tan(pi/2) was infinite *) + piL = 3.1415926535897932384626433832795028841972D0; (* for the reduction of SinCos in LONGREAL *) piByFour = 0.78539816339744830962; lnv = 0.6931610107421875; (* should be exact *) vbytwo = 0.13830277879601902638E-4; (* used in sinh/cosh *) @@ -244,7 +246,7 @@ BEGIN IF x # y THEN xn := xn - HALF END; (* fractional part of reduced number *) - f := SHORT(ABS(LONG(x)) - LONG(xn) * pi); + f := SHORT(ABS(LONG(x)) - LONG(xn) * piL); (* Pre: |f| <= pi/2 *) IF ABS(f) < Limit THEN RETURN sign * f END; @@ -384,7 +386,7 @@ BEGIN (* determine n and the fraction f *) n := round(x * twoByPi); xn := n; - f := SHORT(LONG(x) - LONG(xn) * piByTwo); + f := SHORT(LONG(x) - LONG(xn) * piByTwoL); (* check for underflow *) IF ABS(f) < Limit THEN xnum := f; xden := ONE @@ -434,7 +436,7 @@ VAR res: REAL; i: LONGINT; BEGIN asincos(x, 0, i, res); - IF err # 0 THEN RETURN res END; + IF ABS(x) > ONE THEN RETURN res END; (* this call failed; err stays set from any earlier error *) (* adjust result for the correct quadrant *) IF i = 1 THEN res := piByFour + (piByFour + res) END; @@ -448,7 +450,7 @@ VAR res: REAL; i: LONGINT; BEGIN asincos(x, 1, i, res); - IF err # 0 THEN RETURN res END; + IF ABS(x) > ONE THEN RETURN res END; (* this call failed; err stays set from any earlier error *) (* adjust result for the correct quadrant *) IF x < 0 THEN @@ -619,7 +621,7 @@ END ipower; PROCEDURE sincos* (x: REAL; VAR Sin, Cos: REAL); (* More efficient sin/cos implementation if both values are needed. *) BEGIN - Sin := sin(x); Cos := sqrt(ONE-Sin * Sin) + Sin := sin(x); Cos := cos(x) (* sqrt(ONE-Sin*Sin) lost the sign of cos and its precision near pi/2 *) END sincos; PROCEDURE arctan2* (xn, xd: REAL): REAL; diff --git a/src/runtime/MathL.Mod b/src/runtime/MathL.Mod index 4c1e57a7..71f4e944 100644 --- a/src/runtime/MathL.Mod +++ b/src/runtime/MathL.Mod @@ -520,7 +520,7 @@ END ipower; PROCEDURE sincos* (x: LONGREAL; VAR Sin, Cos: LONGREAL); (* More efficient sin/cos implementation if both values are needed. *) BEGIN - Sin := sin(x); Cos := sqrt(ONE-Sin*Sin) + Sin := sin(x); Cos := cos(x) (* sqrt(ONE-Sin*Sin) lost the sign of cos and its precision near pi/2 *) END sincos; PROCEDURE arctan2* (xn, xd: LONGREAL): LONGREAL; diff --git a/src/test/confidence/math/expected b/src/test/confidence/math/expected index fb01dc20..ca8feaae 100644 --- a/src/test/confidence/math/expected +++ b/src/test/confidence/math/expected @@ -47,7 +47,7 @@ Math.round(-3.0000E+00): -3. MathL.round(-3.0000000000000D+000): -3 Math.round(-4.0000E+00): -4. MathL.round(-4.0000000000000D+000): -4 Math.sqrt(9.00000E-01): 9.48683E-01. MathL.sqrt(9.00000000000000D-001): 9.48683298050514D-001 -Math.sqrt(1.00000E+00): 1.00000E-01. MathL.sqrt(1.00000000000000D+000): 1.00000000000000D+000 +Math.sqrt(1.00000E+00): 1.00000E+00. MathL.sqrt(1.00000000000000D+000): 1.00000000000000D+000 Math.sqrt(1.40000E+00): 1.18322E+00. MathL.sqrt(1.40000000000000D+000): 1.18321595661992D+000 Math.sqrt(1.50000E+00): 1.22474E+00. MathL.sqrt(1.50000000000000D+000): 1.22474487139159D+000 Math.sqrt(1.60000E+00): 1.26491E+00. MathL.sqrt(1.60000000000000D+000): 1.26491106406735D+000 @@ -58,7 +58,7 @@ Math.sqrt(2.50000E+00): 1.58114E+00. MathL.sqrt(2.50000000000000D+000): 1.58113 Math.sqrt(3.00000E+00): 1.73205E+00. MathL.sqrt(3.00000000000000D+000): 1.73205080756888D+000 Math.sqrt(4.00000E+00): 2.00000E+00. MathL.sqrt(4.00000000000000D+000): 2.00000000000000D+000 Math.sqrt(-9.0000E-01): 9.48683E-01. MathL.sqrt(-9.0000000000000D-001): 9.48683298050514D-001 -Math.sqrt(-1.0000E+00): 1.00000E-01. MathL.sqrt(-1.0000000000000D+000): 1.00000000000000D+000 +Math.sqrt(-1.0000E+00): 1.00000E+00. MathL.sqrt(-1.0000000000000D+000): 1.00000000000000D+000 Math.sqrt(-1.4000E+00): 1.18322E+00. MathL.sqrt(-1.4000000000000D+000): 1.18321595661992D+000 Math.sqrt(-1.5000E+00): 1.22474E+00. MathL.sqrt(-1.5000000000000D+000): 1.22474487139159D+000 Math.sqrt(-1.6000E+00): 1.26491E+00. MathL.sqrt(-1.6000000000000D+000): 1.26491106406735D+000 @@ -80,113 +80,113 @@ Math.ln(2.40000E+00): 8.75469E-01. MathL.ln(2.40000000000000D+000): 8.754687373 Math.ln(2.50000E+00): 9.16291E-01. MathL.ln(2.50000000000000D+000): 9.16290731874155D-001 Math.ln(3.00000E+00): 1.09861E+00. MathL.ln(3.00000000000000D+000): 1.09861228866811D+000 Math.ln(4.00000E+00): 1.38629E+00. MathL.ln(4.00000000000000D+000): 1.38629436111989D+000 -Math.ln(-9.0000E-01): -3.40282E+38. MathL.ln(-9.0000000000000D-001): -1.79769296342094D+308 -Math.ln(-1.0000E+00): -3.40282E+38. MathL.ln(-1.0000000000000D+000): -1.79769296342094D+308 -Math.ln(-1.4000E+00): -3.40282E+38. MathL.ln(-1.4000000000000D+000): -1.79769296342094D+308 -Math.ln(-1.5000E+00): -3.40282E+38. MathL.ln(-1.5000000000000D+000): -1.79769296342094D+308 -Math.ln(-1.6000E+00): -3.40282E+38. MathL.ln(-1.6000000000000D+000): -1.79769296342094D+308 -Math.ln(-1.9000E+00): -3.40282E+38. MathL.ln(-1.9000000000000D+000): -1.79769296342094D+308 -Math.ln(-2.0000E+00): -3.40282E+38. MathL.ln(-2.0000000000000D+000): -1.79769296342094D+308 -Math.ln(-2.4000E+00): -3.40282E+38. MathL.ln(-2.4000000000000D+000): -1.79769296342094D+308 -Math.ln(-2.5000E+00): -3.40282E+38. MathL.ln(-2.5000000000000D+000): -1.79769296342094D+308 -Math.ln(-3.0000E+00): -3.40282E+38. MathL.ln(-3.0000000000000D+000): -1.79769296342094D+308 -Math.ln(-4.0000E+00): -3.40282E+38. MathL.ln(-4.0000000000000D+000): -1.79769296342094D+308 +Math.ln(-9.0000E-01): -3.40282E+38. MathL.ln(-9.0000000000000D-001): -1.79769313486232D+308 +Math.ln(-1.0000E+00): -3.40282E+38. MathL.ln(-1.0000000000000D+000): -1.79769313486232D+308 +Math.ln(-1.4000E+00): -3.40282E+38. MathL.ln(-1.4000000000000D+000): -1.79769313486232D+308 +Math.ln(-1.5000E+00): -3.40282E+38. MathL.ln(-1.5000000000000D+000): -1.79769313486232D+308 +Math.ln(-1.6000E+00): -3.40282E+38. MathL.ln(-1.6000000000000D+000): -1.79769313486232D+308 +Math.ln(-1.9000E+00): -3.40282E+38. MathL.ln(-1.9000000000000D+000): -1.79769313486232D+308 +Math.ln(-2.0000E+00): -3.40282E+38. MathL.ln(-2.0000000000000D+000): -1.79769313486232D+308 +Math.ln(-2.4000E+00): -3.40282E+38. MathL.ln(-2.4000000000000D+000): -1.79769313486232D+308 +Math.ln(-2.5000E+00): -3.40282E+38. MathL.ln(-2.5000000000000D+000): -1.79769313486232D+308 +Math.ln(-3.0000E+00): -3.40282E+38. MathL.ln(-3.0000000000000D+000): -1.79769313486232D+308 +Math.ln(-4.0000E+00): -3.40282E+38. MathL.ln(-4.0000000000000D+000): -1.79769313486232D+308 Math.sin(0.00000E+00): 0.00000E+00. MathL.sin(0.00000000000000D+000): 0.00000000000000D+000 Math.sin(1.00000E-01): 9.98334E-02. MathL.sin(1.00000000000000D-001): 9.98334166468282D-002 -Math.sin(1.04720E+00): 8.66025E-01. MathL.sin(1.04719755119660D+000): 8.66025403784440D-001 -Math.sin(1.57080E+00): 1.00000E+00. MathL.sin(1.57079632679490D+000): 9.99999999999999D-001 -Math.sin(3.14159E+00): -3.10862E-15. MathL.sin(3.14159265358979D+000): 3.23108679839857D-015 -Math.sin(-1.0472E+00): -8.66025E-01. MathL.sin(-1.0471975511966D+000): -8.6602540378444D-001 -Math.sin(-1.5708E+00): -1.0000E+00. MathL.sin(-1.5707963267949D+000): -9.99999999999999D-001 -Math.sin(-3.14159E+00): 3.10862E-15. MathL.sin(-3.14159265358979D+000): -3.23108679839857D-015 +Math.sin(1.04720E+00): 8.66025E-01. MathL.sin(1.04719755119660D+000): 8.66025403784439D-001 +Math.sin(1.57080E+00): 1.00000E+00. MathL.sin(1.57079632679490D+000): 1.00000000000000D+000 +Math.sin(3.14159E+00): -8.74228E-08. MathL.sin(3.14159265358979D+000): 1.22464023514027D-016 +Math.sin(-1.0472E+00): -8.66025E-01. MathL.sin(-1.0471975511966D+000): -8.66025403784439D-001 +Math.sin(-1.5708E+00): -1.0000E+00. MathL.sin(-1.5707963267949D+000): -1.0000000000000D+000 +Math.sin(-3.14159E+00): 8.74228E-08. MathL.sin(-3.14159265358979D+000): -1.22464023514027D-016 -Math.cos(0.00000E+00): 1.00000E+00. MathL.cos(0.00000000000000D+000): 9.99999999999999D-001 -Math.cos(1.00000E-01): 9.95004E-01. MathL.cos(1.00000000000000D-001): 9.95004165278025D-001 -Math.cos(1.04720E+00): 5.00000E-01. MathL.cos(1.04719755119660D+000): 4.99999999999998D-001 -Math.cos(1.57080E+00): -1.55431E-15. MathL.cos(1.57079632679490D+000): -3.49148251407644D-015 -Math.cos(3.14159E+00): -1.0000E+00. MathL.cos(3.14159265358979D+000): -9.99999999999999D-001 -Math.cos(-1.0472E+00): 5.00000E-01. MathL.cos(-1.0471975511966D+000): 4.99999999999998D-001 -Math.cos(-1.5708E+00): -1.55431E-15. MathL.cos(-1.5707963267949D+000): -3.49148251407644D-015 -Math.cos(-3.14159E+00): -1.0000E+00. MathL.cos(-3.14159265358979D+000): -9.99999999999999D-001 +Math.cos(0.00000E+00): 1.00000E+00. MathL.cos(0.00000000000000D+000): 1.00000000000000D+000 +Math.cos(1.00000E-01): 9.95004E-01. MathL.cos(1.00000000000000D-001): 9.95004165278026D-001 +Math.cos(1.04720E+00): 5.00000E-01. MathL.cos(1.04719755119660D+000): 5.00000000000000D-001 +Math.cos(1.57080E+00): -4.37114E-08. MathL.cos(1.57079632679490D+000): 6.12320117570134D-017 +Math.cos(3.14159E+00): -1.0000E+00. MathL.cos(3.14159265358979D+000): -1.0000000000000D+000 +Math.cos(-1.0472E+00): 5.00000E-01. MathL.cos(-1.0471975511966D+000): 5.00000000000000D-001 +Math.cos(-1.5708E+00): -4.37114E-08. MathL.cos(-1.5707963267949D+000): 6.12320117570134D-017 +Math.cos(-3.14159E+00): -1.0000E+00. MathL.cos(-3.14159265358979D+000): -1.0000000000000D+000 Math.tan(0.00000E+00): 0.00000E+00. MathL.tan(0.00000000000000D+000): 0.00000000000000D+000 Math.tan(1.00000E-01): 1.00335E-01. MathL.tan(1.00000000000000D-001): 1.00334672085451D-001 Math.tan(1.04720E+00): 1.73205E+00. MathL.tan(1.04719755119660D+000): 1.73205080756888D+000 -Math.tan(1.57080E+00): 3.00240E+14. MathL.tan(1.57079632679490D+000): 2.02340838177263D+007 -Math.tan(3.14159E+00): -6.66134E-15. MathL.tan(3.14159265358979D+000): 3.23108679839857D-015 +Math.tan(1.57080E+00): -2.28773E+07. MathL.tan(1.57079632679490D+000): 1.63313268877772D+016 +Math.tan(3.14159E+00): 8.74228E-08. MathL.tan(3.14159265358979D+000): -1.22464023514027D-016 Math.tan(-1.0472E+00): -1.73205E+00. MathL.tan(-1.0471975511966D+000): -1.73205080756888D+000 -Math.tan(-1.5708E+00): -3.0024E+14. MathL.tan(-1.5707963267949D+000): -2.02340838177263D+007 -Math.tan(-3.14159E+00): 6.66134E-15. MathL.tan(-3.14159265358979D+000): -3.23108679839857D-015 +Math.tan(-1.5708E+00): 2.28773E+07. MathL.tan(-1.5707963267949D+000): -1.63313268877772D+016 +Math.tan(-3.14159E+00): -8.74228E-08. MathL.tan(-3.14159265358979D+000): 1.22464023514027D-016 -Math.arcsin(9.00000E-01): -4.51027E-01. MathL.arcsin(9.00000000000000D-001): 1.11976951499864D+000 -Math.arcsin(1.00000E+00): -0.0000E+00. MathL.arcsin(1.00000000000000D+000): 1.57079632679490D+000 -Math.arcsin(1.40000E+00): 3.40282E+38. MathL.arcsin(1.40000000000000D+000): 1.79769296342094D+308 -Math.arcsin(1.50000E+00): 3.40282E+38. MathL.arcsin(1.50000000000000D+000): 1.79769296342094D+308 -Math.arcsin(1.60000E+00): 3.40282E+38. MathL.arcsin(1.60000000000000D+000): 1.79769296342094D+308 -Math.arcsin(1.90000E+00): 3.40282E+38. MathL.arcsin(1.90000000000000D+000): 1.79769296342094D+308 -Math.arcsin(2.00000E+00): 3.40282E+38. MathL.arcsin(2.00000000000000D+000): 1.79769296342094D+308 -Math.arcsin(2.40000E+00): 3.40282E+38. MathL.arcsin(2.40000000000000D+000): 1.79769296342094D+308 -Math.arcsin(2.50000E+00): 3.40282E+38. MathL.arcsin(2.50000000000000D+000): 1.79769296342094D+308 -Math.arcsin(3.00000E+00): 3.40282E+38. MathL.arcsin(3.00000000000000D+000): 1.79769296342094D+308 -Math.arcsin(4.00000E+00): 3.40282E+38. MathL.arcsin(4.00000000000000D+000): 1.79769296342094D+308 -Math.arcsin(-9.0000E-01): -4.51027E-01. MathL.arcsin(-9.0000000000000D-001): -1.11976951499864D+000 -Math.arcsin(-1.0000E+00): -0.0000E+00. MathL.arcsin(-1.0000000000000D+000): -1.5707963267949D+000 -Math.arcsin(-1.4000E+00): 3.40282E+38. MathL.arcsin(-1.4000000000000D+000): 1.79769296342094D+308 -Math.arcsin(-1.5000E+00): 3.40282E+38. MathL.arcsin(-1.5000000000000D+000): 1.79769296342094D+308 -Math.arcsin(-1.6000E+00): 3.40282E+38. MathL.arcsin(-1.6000000000000D+000): 1.79769296342094D+308 -Math.arcsin(-1.9000E+00): 3.40282E+38. MathL.arcsin(-1.9000000000000D+000): 1.79769296342094D+308 -Math.arcsin(-2.0000E+00): 3.40282E+38. MathL.arcsin(-2.0000000000000D+000): 1.79769296342094D+308 -Math.arcsin(-2.4000E+00): 3.40282E+38. MathL.arcsin(-2.4000000000000D+000): 1.79769296342094D+308 -Math.arcsin(-2.5000E+00): 3.40282E+38. MathL.arcsin(-2.5000000000000D+000): 1.79769296342094D+308 -Math.arcsin(-3.0000E+00): 3.40282E+38. MathL.arcsin(-3.0000000000000D+000): 1.79769296342094D+308 -Math.arcsin(-4.0000E+00): 3.40282E+38. MathL.arcsin(-4.0000000000000D+000): 1.79769296342094D+308 +Math.arcsin(9.00000E-01): 1.11977E+00. MathL.arcsin(9.00000000000000D-001): 1.11976951499863D+000 +Math.arcsin(1.00000E+00): 1.57080E+00. MathL.arcsin(1.00000000000000D+000): 1.57079632679490D+000 +Math.arcsin(1.40000E+00): 3.40282E+38. MathL.arcsin(1.40000000000000D+000): 1.79769313486232D+308 +Math.arcsin(1.50000E+00): 3.40282E+38. MathL.arcsin(1.50000000000000D+000): 1.79769313486232D+308 +Math.arcsin(1.60000E+00): 3.40282E+38. MathL.arcsin(1.60000000000000D+000): 1.79769313486232D+308 +Math.arcsin(1.90000E+00): 3.40282E+38. MathL.arcsin(1.90000000000000D+000): 1.79769313486232D+308 +Math.arcsin(2.00000E+00): 3.40282E+38. MathL.arcsin(2.00000000000000D+000): 1.79769313486232D+308 +Math.arcsin(2.40000E+00): 3.40282E+38. MathL.arcsin(2.40000000000000D+000): 1.79769313486232D+308 +Math.arcsin(2.50000E+00): 3.40282E+38. MathL.arcsin(2.50000000000000D+000): 1.79769313486232D+308 +Math.arcsin(3.00000E+00): 3.40282E+38. MathL.arcsin(3.00000000000000D+000): 1.79769313486232D+308 +Math.arcsin(4.00000E+00): 3.40282E+38. MathL.arcsin(4.00000000000000D+000): 1.79769313486232D+308 +Math.arcsin(-9.0000E-01): -1.11977E+00. MathL.arcsin(-9.0000000000000D-001): -1.11976951499863D+000 +Math.arcsin(-1.0000E+00): -1.5708E+00. MathL.arcsin(-1.0000000000000D+000): -1.5707963267949D+000 +Math.arcsin(-1.4000E+00): 3.40282E+38. MathL.arcsin(-1.4000000000000D+000): 1.79769313486232D+308 +Math.arcsin(-1.5000E+00): 3.40282E+38. MathL.arcsin(-1.5000000000000D+000): 1.79769313486232D+308 +Math.arcsin(-1.6000E+00): 3.40282E+38. MathL.arcsin(-1.6000000000000D+000): 1.79769313486232D+308 +Math.arcsin(-1.9000E+00): 3.40282E+38. MathL.arcsin(-1.9000000000000D+000): 1.79769313486232D+308 +Math.arcsin(-2.0000E+00): 3.40282E+38. MathL.arcsin(-2.0000000000000D+000): 1.79769313486232D+308 +Math.arcsin(-2.4000E+00): 3.40282E+38. MathL.arcsin(-2.4000000000000D+000): 1.79769313486232D+308 +Math.arcsin(-2.5000E+00): 3.40282E+38. MathL.arcsin(-2.5000000000000D+000): 1.79769313486232D+308 +Math.arcsin(-3.0000E+00): 3.40282E+38. MathL.arcsin(-3.0000000000000D+000): 1.79769313486232D+308 +Math.arcsin(-4.0000E+00): 3.40282E+38. MathL.arcsin(-4.0000000000000D+000): 1.79769313486232D+308 -Math.arccos(9.00000E-01): -4.51027E-01. MathL.arccos(9.00000000000000D-001): 4.51026811796263D-001 -Math.arccos(1.00000E+00): -0.0000E+00. MathL.arccos(1.00000000000000D+000): 0.00000000000000D+000 -Math.arccos(1.40000E+00): 3.40282E+38. MathL.arccos(1.40000000000000D+000): 1.79769296342094D+308 -Math.arccos(1.50000E+00): 3.40282E+38. MathL.arccos(1.50000000000000D+000): 1.79769296342094D+308 -Math.arccos(1.60000E+00): 3.40282E+38. MathL.arccos(1.60000000000000D+000): 1.79769296342094D+308 -Math.arccos(1.90000E+00): 3.40282E+38. MathL.arccos(1.90000000000000D+000): 1.79769296342094D+308 -Math.arccos(2.00000E+00): 3.40282E+38. MathL.arccos(2.00000000000000D+000): 1.79769296342094D+308 -Math.arccos(2.40000E+00): 3.40282E+38. MathL.arccos(2.40000000000000D+000): 1.79769296342094D+308 -Math.arccos(2.50000E+00): 3.40282E+38. MathL.arccos(2.50000000000000D+000): 1.79769296342094D+308 -Math.arccos(3.00000E+00): 3.40282E+38. MathL.arccos(3.00000000000000D+000): 1.79769296342094D+308 -Math.arccos(4.00000E+00): 3.40282E+38. MathL.arccos(4.00000000000000D+000): 1.79769296342094D+308 -Math.arccos(-9.0000E-01): -4.51027E-01. MathL.arccos(-9.0000000000000D-001): 2.69056584179353D+000 -Math.arccos(-1.0000E+00): -0.0000E+00. MathL.arccos(-1.0000000000000D+000): 3.14159265358979D+000 -Math.arccos(-1.4000E+00): 3.40282E+38. MathL.arccos(-1.4000000000000D+000): 1.79769296342094D+308 -Math.arccos(-1.5000E+00): 3.40282E+38. MathL.arccos(-1.5000000000000D+000): 1.79769296342094D+308 -Math.arccos(-1.6000E+00): 3.40282E+38. MathL.arccos(-1.6000000000000D+000): 1.79769296342094D+308 -Math.arccos(-1.9000E+00): 3.40282E+38. MathL.arccos(-1.9000000000000D+000): 1.79769296342094D+308 -Math.arccos(-2.0000E+00): 3.40282E+38. MathL.arccos(-2.0000000000000D+000): 1.79769296342094D+308 -Math.arccos(-2.4000E+00): 3.40282E+38. MathL.arccos(-2.4000000000000D+000): 1.79769296342094D+308 -Math.arccos(-2.5000E+00): 3.40282E+38. MathL.arccos(-2.5000000000000D+000): 1.79769296342094D+308 -Math.arccos(-3.0000E+00): 3.40282E+38. MathL.arccos(-3.0000000000000D+000): 1.79769296342094D+308 -Math.arccos(-4.0000E+00): 3.40282E+38. MathL.arccos(-4.0000000000000D+000): 1.79769296342094D+308 +Math.arccos(9.00000E-01): 4.51027E-01. MathL.arccos(9.00000000000000D-001): 4.51026811796262D-001 +Math.arccos(1.00000E+00): 0.00000E+00. MathL.arccos(1.00000000000000D+000): 0.00000000000000D+000 +Math.arccos(1.40000E+00): 3.40282E+38. MathL.arccos(1.40000000000000D+000): 1.79769313486232D+308 +Math.arccos(1.50000E+00): 3.40282E+38. MathL.arccos(1.50000000000000D+000): 1.79769313486232D+308 +Math.arccos(1.60000E+00): 3.40282E+38. MathL.arccos(1.60000000000000D+000): 1.79769313486232D+308 +Math.arccos(1.90000E+00): 3.40282E+38. MathL.arccos(1.90000000000000D+000): 1.79769313486232D+308 +Math.arccos(2.00000E+00): 3.40282E+38. MathL.arccos(2.00000000000000D+000): 1.79769313486232D+308 +Math.arccos(2.40000E+00): 3.40282E+38. MathL.arccos(2.40000000000000D+000): 1.79769313486232D+308 +Math.arccos(2.50000E+00): 3.40282E+38. MathL.arccos(2.50000000000000D+000): 1.79769313486232D+308 +Math.arccos(3.00000E+00): 3.40282E+38. MathL.arccos(3.00000000000000D+000): 1.79769313486232D+308 +Math.arccos(4.00000E+00): 3.40282E+38. MathL.arccos(4.00000000000000D+000): 1.79769313486232D+308 +Math.arccos(-9.0000E-01): 2.69057E+00. MathL.arccos(-9.0000000000000D-001): 2.69056584179353D+000 +Math.arccos(-1.0000E+00): 3.14159E+00. MathL.arccos(-1.0000000000000D+000): 3.14159265358979D+000 +Math.arccos(-1.4000E+00): 3.40282E+38. MathL.arccos(-1.4000000000000D+000): 1.79769313486232D+308 +Math.arccos(-1.5000E+00): 3.40282E+38. MathL.arccos(-1.5000000000000D+000): 1.79769313486232D+308 +Math.arccos(-1.6000E+00): 3.40282E+38. MathL.arccos(-1.6000000000000D+000): 1.79769313486232D+308 +Math.arccos(-1.9000E+00): 3.40282E+38. MathL.arccos(-1.9000000000000D+000): 1.79769313486232D+308 +Math.arccos(-2.0000E+00): 3.40282E+38. MathL.arccos(-2.0000000000000D+000): 1.79769313486232D+308 +Math.arccos(-2.4000E+00): 3.40282E+38. MathL.arccos(-2.4000000000000D+000): 1.79769313486232D+308 +Math.arccos(-2.5000E+00): 3.40282E+38. MathL.arccos(-2.5000000000000D+000): 1.79769313486232D+308 +Math.arccos(-3.0000E+00): 3.40282E+38. MathL.arccos(-3.0000000000000D+000): 1.79769313486232D+308 +Math.arccos(-4.0000E+00): 3.40282E+38. MathL.arccos(-4.0000000000000D+000): 1.79769313486232D+308 -Math.arctan(9.00000E-01): 7.32815E-01. MathL.arctan(9.00000000000000D-001): 7.32815101786508D-001 -Math.arctan(1.00000E+00): 7.85398E-01. MathL.arctan(1.00000000000000D+000): 7.85398163397449D-001 -Math.arctan(1.40000E+00): 9.50547E-01. MathL.arctan(1.40000000000000D+000): 9.50546840812077D-001 -Math.arctan(1.50000E+00): 9.82794E-01. MathL.arctan(1.50000000000000D+000): 9.82793723247331D-001 -Math.arctan(1.60000E+00): 1.01220E+00. MathL.arctan(1.60000000000000D+000): 1.01219701145134D+000 -Math.arctan(1.90000E+00): 1.08632E+00. MathL.arctan(1.90000000000000D+000): 1.08631839775788D+000 +Math.arctan(9.00000E-01): 7.32815E-01. MathL.arctan(9.00000000000000D-001): 7.32815101786507D-001 +Math.arctan(1.00000E+00): 7.85398E-01. MathL.arctan(1.00000000000000D+000): 7.85398163397448D-001 +Math.arctan(1.40000E+00): 9.50547E-01. MathL.arctan(1.40000000000000D+000): 9.50546840812075D-001 +Math.arctan(1.50000E+00): 9.82794E-01. MathL.arctan(1.50000000000000D+000): 9.82793723247329D-001 +Math.arctan(1.60000E+00): 1.01220E+00. MathL.arctan(1.60000000000000D+000): 1.01219701145133D+000 +Math.arctan(1.90000E+00): 1.08632E+00. MathL.arctan(1.90000000000000D+000): 1.08631839775787D+000 Math.arctan(2.00000E+00): 1.10715E+00. MathL.arctan(2.00000000000000D+000): 1.10714871779409D+000 Math.arctan(2.40000E+00): 1.17601E+00. MathL.arctan(2.40000000000000D+000): 1.17600520709514D+000 Math.arctan(2.50000E+00): 1.19029E+00. MathL.arctan(2.50000000000000D+000): 1.19028994968253D+000 -Math.arctan(3.00000E+00): 1.24905E+00. MathL.arctan(3.00000000000000D+000): 1.24904577239826D+000 -Math.arctan(4.00000E+00): 1.32582E+00. MathL.arctan(4.00000000000000D+000): 1.32581766366804D+000 -Math.arctan(-9.0000E-01): -7.32815E-01. MathL.arctan(-9.0000000000000D-001): -7.32815101786508D-001 -Math.arctan(-1.0000E+00): -7.85398E-01. MathL.arctan(-1.0000000000000D+000): -7.85398163397449D-001 -Math.arctan(-1.4000E+00): -9.50547E-01. MathL.arctan(-1.4000000000000D+000): -9.50546840812077D-001 -Math.arctan(-1.5000E+00): -9.82794E-01. MathL.arctan(-1.5000000000000D+000): -9.82793723247331D-001 -Math.arctan(-1.6000E+00): -1.0122E+00. MathL.arctan(-1.6000000000000D+000): -1.01219701145134D+000 -Math.arctan(-1.9000E+00): -1.08632E+00. MathL.arctan(-1.9000000000000D+000): -1.08631839775788D+000 +Math.arctan(3.00000E+00): 1.24905E+00. MathL.arctan(3.00000000000000D+000): 1.24904577239825D+000 +Math.arctan(4.00000E+00): 1.32582E+00. MathL.arctan(4.00000000000000D+000): 1.32581766366803D+000 +Math.arctan(-9.0000E-01): -7.32815E-01. MathL.arctan(-9.0000000000000D-001): -7.32815101786507D-001 +Math.arctan(-1.0000E+00): -7.85398E-01. MathL.arctan(-1.0000000000000D+000): -7.85398163397448D-001 +Math.arctan(-1.4000E+00): -9.50547E-01. MathL.arctan(-1.4000000000000D+000): -9.50546840812075D-001 +Math.arctan(-1.5000E+00): -9.82794E-01. MathL.arctan(-1.5000000000000D+000): -9.82793723247329D-001 +Math.arctan(-1.6000E+00): -1.0122E+00. MathL.arctan(-1.6000000000000D+000): -1.01219701145133D+000 +Math.arctan(-1.9000E+00): -1.08632E+00. MathL.arctan(-1.9000000000000D+000): -1.08631839775787D+000 Math.arctan(-2.0000E+00): -1.10715E+00. MathL.arctan(-2.0000000000000D+000): -1.10714871779409D+000 Math.arctan(-2.4000E+00): -1.17601E+00. MathL.arctan(-2.4000000000000D+000): -1.17600520709514D+000 Math.arctan(-2.5000E+00): -1.19029E+00. MathL.arctan(-2.5000000000000D+000): -1.19028994968253D+000 -Math.arctan(-3.0000E+00): -1.24905E+00. MathL.arctan(-3.0000000000000D+000): -1.24904577239826D+000 -Math.arctan(-4.0000E+00): -1.32582E+00. MathL.arctan(-4.0000000000000D+000): -1.32581766366804D+000 +Math.arctan(-3.0000E+00): -1.24905E+00. MathL.arctan(-3.0000000000000D+000): -1.24904577239825D+000 +Math.arctan(-4.0000E+00): -1.32582E+00. MathL.arctan(-4.0000000000000D+000): -1.32581766366803D+000 Math.sinh(9.00000E-01): 1.02652E+00. MathL.sinh(9.00000000000000D-001): 1.02651672570818D+000 Math.sinh(1.00000E+00): 1.17520E+00. MathL.sinh(1.00000000000000D+000): 1.17520119364380D+000