From 3b0d8c163ccd6e950d9f3adb6b762188296befd5 Mon Sep 17 00:00:00 2001 From: Norayr Chilingarian Date: Fri, 18 Oct 2013 17:45:17 +0400 Subject: [PATCH] added oocRealMath oocOakMath modules Former-commit-id: 24b30cdae7633db84a86c76681b87cd1ef06c2a4 --- makefile | 1 + makefile.gnuc.armv6j | 1 + makefile.gnuc.armv6j_hardfp | 1 + makefile.gnuc.armv7a_hardfp | 1 + makefile.gnuc.x86 | 1 + makefile.gnuc.x86_64 | 1 + ocat | Bin 208830 -> 208830 bytes showdef.REMOVED.git-id | 2 +- src/lib/ooc/oocOakMath.Mod | 137 ++++++++ src/lib/ooc/oocRealMath.Mod | 609 ++++++++++++++++++++++++++++++++++++ voc.REMOVED.git-id | 2 +- vocstatic.REMOVED.git-id | 2 +- 12 files changed, 755 insertions(+), 3 deletions(-) create mode 100644 src/lib/ooc/oocOakMath.Mod create mode 100644 src/lib/ooc/oocRealMath.Mod diff --git a/makefile b/makefile index b862560d..9ee8fb5b 100644 --- a/makefile +++ b/makefile @@ -133,6 +133,7 @@ stage6: $(VOCSTATIC) -sP ooc2IntStr.Mod $(VOCSTATIC) -sP ooc2Real0.Mod $(VOCSTATIC) -sP oocLowReal.Mod oocLowLReal.Mod + $(VOCSTATIC) -sP oocRealMath.Mod oocOakMath.Mod $(VOCSTATIC) -sP oocwrapperlibc.Mod $(VOCSTATIC) -sP ulmSYSTEM.Mod $(VOCSTATIC) -sP ulmASCII.Mod ulmSets.Mod diff --git a/makefile.gnuc.armv6j b/makefile.gnuc.armv6j index 1a1b9d70..71d012b9 100644 --- a/makefile.gnuc.armv6j +++ b/makefile.gnuc.armv6j @@ -133,6 +133,7 @@ stage6: $(VOCSTATIC) -sP ooc2IntStr.Mod $(VOCSTATIC) -sP ooc2Real0.Mod $(VOCSTATIC) -sP oocLowReal.Mod oocLowLReal.Mod + $(VOCSTATIC) -sP oocRealMath.Mod oocOakMath.Mod $(VOCSTATIC) -sP oocwrapperlibc.Mod $(VOCSTATIC) -sP ulmSYSTEM.Mod $(VOCSTATIC) -sP ulmASCII.Mod ulmSets.Mod diff --git a/makefile.gnuc.armv6j_hardfp b/makefile.gnuc.armv6j_hardfp index 7e9ce7dc..f843a2c3 100644 --- a/makefile.gnuc.armv6j_hardfp +++ b/makefile.gnuc.armv6j_hardfp @@ -133,6 +133,7 @@ stage6: $(VOCSTATIC) -sP ooc2IntStr.Mod $(VOCSTATIC) -sP ooc2Real0.Mod $(VOCSTATIC) -sP oocLowReal.Mod oocLowLReal.Mod + $(VOCSTATIC) -sP oocRealMath.Mod oocOakMath.Mod $(VOCSTATIC) -sP oocwrapperlibc.Mod $(VOCSTATIC) -sP ulmSYSTEM.Mod $(VOCSTATIC) -sP ulmASCII.Mod ulmSets.Mod diff --git a/makefile.gnuc.armv7a_hardfp b/makefile.gnuc.armv7a_hardfp index 2a7b60bd..12182320 100644 --- a/makefile.gnuc.armv7a_hardfp +++ b/makefile.gnuc.armv7a_hardfp @@ -133,6 +133,7 @@ stage6: $(VOCSTATIC) -sP ooc2IntStr.Mod $(VOCSTATIC) -sP ooc2Real0.Mod $(VOCSTATIC) -sP oocLowReal.Mod oocLowLReal.Mod + $(VOCSTATIC) -sP oocRealMath.Mod oocOakMath.Mod $(VOCSTATIC) -sP oocwrapperlibc.Mod $(VOCSTATIC) -sP ulmSYSTEM.Mod $(VOCSTATIC) -sP ulmASCII.Mod ulmSets.Mod diff --git a/makefile.gnuc.x86 b/makefile.gnuc.x86 index c6b7ebf8..5d1e812e 100644 --- a/makefile.gnuc.x86 +++ b/makefile.gnuc.x86 @@ -133,6 +133,7 @@ stage6: $(VOCSTATIC) -sP ooc2IntStr.Mod $(VOCSTATIC) -sP ooc2Real0.Mod $(VOCSTATIC) -sP oocLowReal.Mod oocLowLReal.Mod + $(VOCSTATIC) -sP oocRealMath.Mod oocOakMath.Mod $(VOCSTATIC) -sP oocwrapperlibc.Mod $(VOCSTATIC) -sP ulmSYSTEM.Mod $(VOCSTATIC) -sP ulmASCII.Mod ulmSets.Mod diff --git a/makefile.gnuc.x86_64 b/makefile.gnuc.x86_64 index b862560d..9ee8fb5b 100644 --- a/makefile.gnuc.x86_64 +++ b/makefile.gnuc.x86_64 @@ -133,6 +133,7 @@ stage6: $(VOCSTATIC) -sP ooc2IntStr.Mod $(VOCSTATIC) -sP ooc2Real0.Mod $(VOCSTATIC) -sP oocLowReal.Mod oocLowLReal.Mod + $(VOCSTATIC) -sP oocRealMath.Mod oocOakMath.Mod $(VOCSTATIC) -sP oocwrapperlibc.Mod $(VOCSTATIC) -sP ulmSYSTEM.Mod $(VOCSTATIC) -sP ulmASCII.Mod ulmSets.Mod diff --git a/ocat b/ocat index 443db97c220142719483629c1b62a80cbf397a85..85a685c8355116947bc3f1c3b46909ec868304ca 100755 GIT binary patch delta 17596 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 F{{<;xV*&sG diff --git a/showdef.REMOVED.git-id b/showdef.REMOVED.git-id index 8def490d..ce9c3c1d 100644 --- a/showdef.REMOVED.git-id +++ b/showdef.REMOVED.git-id @@ -1 +1 @@ -fdd63e86437d5144b706952e0eacff1129b2fa9f \ No newline at end of file +fbc7697598433a1043bcaa070da8870e6f7f07c2 \ No newline at end of file diff --git a/src/lib/ooc/oocOakMath.Mod b/src/lib/ooc/oocOakMath.Mod new file mode 100644 index 00000000..fdfb2818 --- /dev/null +++ b/src/lib/ooc/oocOakMath.Mod @@ -0,0 +1,137 @@ +(* $Id: OakMath.Mod,v 1.1 1997/02/07 07:45:32 oberon1 Exp $ *) +MODULE oocOakMath; + +IMPORT RealMath := oocRealMath; + + +CONST + pi* = RealMath.pi; + e* = RealMath.exp1; + +PROCEDURE sqrt* (x: REAL): REAL; +(* sqrt(x) returns the square root of x, where x must be positive. *) + BEGIN + RETURN RealMath.sqrt (x) + END sqrt; + +PROCEDURE power* (x, base: REAL): REAL; +(* power(x, base) returns the x to the power base. *) + BEGIN + RETURN RealMath.power (x, base) + END power; + +PROCEDURE exp* (x: REAL): REAL; +(* exp(x) is the exponential of x base e. x must not be so small that this + exponential underflows nor so large that it overflows. *) + BEGIN + RETURN RealMath.exp (x) + END exp; + +PROCEDURE ln* (x: REAL): REAL; +(* ln(x) returns the natural logarithm (base e) of x. *) + BEGIN + RETURN RealMath.ln (x) + END ln; + +PROCEDURE log* (x, base: REAL): REAL; +(* log(x,base) is the logarithm of x base b. All positive arguments are + allowed. The base b must be positive. *) + BEGIN + RETURN RealMath.log (x, base) + END log; + +PROCEDURE round* (x: REAL): REAL; +(* round(x) if fraction part of x is in range 0.0 to 0.5 then the result is + the largest integer not greater than x, otherwise the result is x rounded + up to the next highest whole number. Note that integer values cannot always + be exactly represented in REAL or REAL format. *) + BEGIN + RETURN RealMath.round (x) + END round; + +PROCEDURE sin* (x: REAL): REAL; + BEGIN + RETURN RealMath.sin (x) + END sin; + +PROCEDURE cos* (x: REAL): REAL; + BEGIN + RETURN RealMath.cos (x) + END cos; + +PROCEDURE tan* (x: REAL): REAL; +(* sin, cos, tan(x) returns the sine, cosine or tangent value of x, where x is + in radians. *) + BEGIN + RETURN RealMath.tan (x) + END tan; + +PROCEDURE arcsin* (x: REAL): REAL; + BEGIN + RETURN RealMath.arcsin (x) + END arcsin; + +PROCEDURE arccos* (x: REAL): REAL; + BEGIN + RETURN RealMath.arccos (x) + END arccos; + +PROCEDURE arctan* (x: REAL): REAL; +(* arcsin, arcos, arctan(x) returns the arcsine, arcos, arctan value in radians + of x, where x is in the sine, cosine or tangent value. *) + BEGIN + RETURN RealMath.arctan (x) + END arctan; + +PROCEDURE arctan2* (xn, xd: REAL): REAL; +(* arctan2(xn,xd) is the quadrant-correct arc tangent atan(xn/xd). If the + denominator xd is zero, then the numerator xn must not be zero. All + arguments are legal except xn = xd = 0. *) + BEGIN + RETURN RealMath.arctan2 (xn, xd) + END arctan2; + + +PROCEDURE sinh* (x: REAL): REAL; +(* sinh(x) is the hyperbolic sine of x. The argument x must not be so large + that exp(|x|) overflows. *) + BEGIN + RETURN RealMath.sinh (x) + END sinh; + +PROCEDURE cosh* (x: REAL): REAL; +(* cosh(x) is the hyperbolic cosine of x. The argument x must not be so large + that exp(|x|) overflows. *) + BEGIN + RETURN RealMath.cosh (x) + END cosh; + +PROCEDURE tanh* (x: REAL): REAL; +(* tanh(x) is the hyperbolic tangent of x. All arguments are legal. *) + BEGIN + RETURN RealMath.tanh (x) + END tanh; + +PROCEDURE arcsinh* (x: REAL): REAL; +(* arcsinh(x) is the arc hyperbolic sine of x. All arguments are legal. *) + BEGIN + RETURN RealMath.arcsinh (x) + END arcsinh; + +PROCEDURE arccosh* (x: REAL): REAL; +(* arccosh(x) is the arc hyperbolic cosine of x. All arguments greater than + or equal to 1 are legal. *) + BEGIN + RETURN RealMath.arccosh (x) + END arccosh; + +PROCEDURE arctanh* (x: REAL): REAL; +(* arctanh(x) is the arc hyperbolic tangent of x. |x| < 1 - sqrt(em), where + em is machine epsilon. Note that |x| must not be so close to 1 that the + result is less accurate than half precision. *) + BEGIN + RETURN RealMath.arctanh (x) + END arctanh; + + +END oocOakMath. diff --git a/src/lib/ooc/oocRealMath.Mod b/src/lib/ooc/oocRealMath.Mod new file mode 100644 index 00000000..611f1f96 --- /dev/null +++ b/src/lib/ooc/oocRealMath.Mod @@ -0,0 +1,609 @@ +(* $Id: RealMath.Mod,v 1.6 1999/09/02 13:19:17 acken Exp $ *) +MODULE oocRealMath; + +(* + RealMath - Target independent mathematical functions for REAL + (IEEE single-precision) numbers. + + Numerical approximations are taken from "Software Manual for the + Elementary Functions" by Cody & Waite and "Computer Approximations" + by Hart et al. + + Copyright (C) 1995 Michael Griebling + + This module is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. + + This module is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) + +IMPORT l := oocLowReal, S := SYSTEM; + +CONST + pi* = 3.1415926535897932384626433832795028841972; + exp1* = 2.7182818284590452353602874713526624977572; + + ZERO=0.0; ONE=1.0; HALF=0.5; TWO=2.0; (* local constants *) + + (* internally-used constants *) + huge=l.large; (* largest number this package accepts *) + miny=ONE/huge; (* smallest number this package accepts *) + sqrtHalf=0.70710678118654752440; + Limit=2.4414062E-4; (* 2**(-MantBits/2) *) + eps=2.9802322E-8; (* 2**(-MantBits-1) *) + piInv=0.31830988618379067154; (* 1/pi *) + piByTwo=1.57079632679489661923132; + piByFour=0.78539816339744830962; + lnv=0.6931610107421875; (* should be exact *) + vbytwo=0.13830277879601902638E-4; (* used in sinh/cosh *) + ln2Inv=1.44269504088896340735992468100189213; + + (* error/exception codes *) + NoError*=0; IllegalRoot*=1; IllegalLog*=2; Overflow*=3; IllegalPower*=4; IllegalLogBase*=5; + IllegalTrig*=6; IllegalInvTrig*=7; HypInvTrigClipped*=8; IllegalHypInvTrig*=9; + LossOfAccuracy*=10; Underflow*=11; + +VAR + a1: ARRAY 18 OF REAL; (* lookup table for power function *) + a2: ARRAY 9 OF REAL; (* lookup table for power function *) + em: REAL; (* largest number such that 1+epsilon > 1.0 *) + LnInfinity: REAL; (* natural log of infinity *) + LnSmall: REAL; (* natural log of very small number *) + SqrtInfinity: REAL; (* square root of infinity *) + TanhMax: REAL; (* maximum Tanh value *) + t: REAL; (* internal variables *) + +(* internally used support routines *) + +PROCEDURE SinCos (x, y, sign: REAL): REAL; + CONST + ymax=9099; (* ENTIER(pi*2**(MantBits/2)) *) + r1=-0.1666665668E+0; + r2= 0.8333025139E-2; + r3=-0.1980741872E-3; + r4= 0.2601903036E-5; + VAR + n: LONGINT; xn, f, g: REAL; +BEGIN + IF y>=ymax THEN l.ErrorHandler(LossOfAccuracy); RETURN ZERO END; + + (* determine the reduced number *) + n:=ENTIER(y*piInv+HALF); xn:=n; + IF ODD(n) THEN sign:=-sign END; + x:=ABS(x); + IF x#y THEN xn:=xn-HALF END; + + (* fractional part of reduced number *) + f:=SHORT(ABS(LONG(x)) - LONG(xn)*pi); + + (* Pre: |f| <= pi/2 *) + IF ABS(f)= 0 *) + CONST + P0=0.41731; P1=0.59016; + VAR + xMant, yEst, z: REAL; xExp: INTEGER; +BEGIN + (* optimize zeros and check for illegal negative roots *) + IF x=ZERO THEN RETURN ZERO END; + IF x=LnInfinity THEN l.ErrorHandler(Overflow); RETURN huge + ELSIF x 0 *) + CONST + c1=355.0/512.0; c2=-2.121944400546905827679E-4; + A0=-0.5527074855E+0; B0=-0.6632718214E+1; + VAR f, zn, zd, r, z, w, xn: REAL; n: INTEGER; +BEGIN + (* ensure illegal inputs are trapped and handled *) + IF x<=ZERO THEN l.ErrorHandler(IllegalLog); RETURN -huge END; + + (* reduce the range of the input *) + f:=l.fraction(x)*HALF; n:=l.exponent(x)+1; + IF f>sqrtHalf THEN zn:=(f-HALF)-HALF; zd:=f*HALF+HALF + ELSE zn:=f-HALF; zd:=zn*HALF+HALF; DEC(n) + END; + + (* evaluate rational approximation from "Software Manual for the Elementary Functions" *) + z:=zn/zd; w:=z*z; r:=z+z*(w*A0/(w+B0)); + + (* scale the output *) + xn:=n; + RETURN (xn*c2+r)+xn*c1 +END ln; + +(* The angle in all trigonometric functions is measured in radians *) + +PROCEDURE sin*(x: REAL): REAL; + (* Returns the sine of x for all x *) +BEGIN + IF xymax THEN l.ErrorHandler(LossOfAccuracy); RETURN ZERO END; + + (* determine n and the fraction f *) + n:=round(x*twoByPi); xn:=n; + f:=SHORT(LONG(x)-LONG(xn)*piByTwo); + + (* check for underflow *) + IF ABS(f)HALF THEN + i:=1-flag; + IF y>ONE THEN l.ErrorHandler(IllegalInvTrig); res:=huge; RETURN END; + + (* reduce the input argument *) + g:=(ONE-y)*HALF; r:=-sqrt(g); y:=r+r; + + (* compute approximation *) + r:=((P2*g+P1)*g)/((g+Q1)*g+Q0); + res:=y+(y*r) + ELSE + i:=flag; + IF yONE THEN f:=ONE/f; n:=2 + ELSE n:=0 + END; + + (* check if f should be scaled *) + IF f>rt32 THEN f:=(((a*f-HALF)-HALF)+f)/(rt3+f); INC(n) END; + + (* check for underflow *) + IF ABS(f)1 THEN res:=-res END; + CASE n OF + | 1: res:=res+piBySix + | 2: res:=res+piByTwo + | 3: res:=res+piByThree + | ELSE (* do nothing *) + END; + RETURN res +END atan; + +PROCEDURE arctan*(x: REAL): REAL; + (* Returns the arctangent of x, in the range [-pi/2, pi/2] for all x *) +BEGIN + IF x<0 THEN RETURN -atan(-x) + ELSE RETURN atan(x) + END +END arctan; + +PROCEDURE power*(base, exponent: REAL): REAL; + (* Returns the value of the number base raised to the power exponent + for base > 0 *) + CONST P1=0.83357541E-1; K=0.4426950409; + Q1=0.69314675; Q2=0.24018510; Q3=0.54360383E-1; + OneOver16=0.0625; XMAX=16*(l.expoMax+1)-1; (*XMIN=16*l.expoMin;*) XMIN=-2016; (* to make it easier for voc; -- noch *) + VAR z, g, R, v, u2, u1, w1, w2: REAL; w: LONGREAL; + m, p, i: INTEGER; mp, pp, iw1: LONGINT; +BEGIN + (* handle all possible error conditions *) + IF base<=ZERO THEN + IF base#ZERO THEN l.ErrorHandler(IllegalPower); base:=-base + ELSIF exponent>ZERO THEN RETURN ZERO + ELSE l.ErrorHandler(IllegalPower); RETURN huge + END + END; + + (* extract the exponent of base to m and clear exponent of base in g *) + g:=l.fraction(base)*HALF; m:=l.exponent(base)+1; + + (* determine p table offset with an unrolled binary search *) + p:=1; + IF g<=a1[9] THEN p:=9 END; + IF g<=a1[p+4] THEN INC(p, 4) END; + IF g<=a1[p+2] THEN INC(p, 2) END; + + (* compute scaled z so that |z| <= 0.044 *) + z:=((g-a1[p+1])-a2[(p+1) DIV 2])/(g+a1[p+1]); z:=z+z; + + (* approximation for log2(z) from "Software Manual for the Elementary Functions" *) + v:=z*z; R:=P1*v*z; R:=R+K*R; u2:=(R+z*K)+z; + u1:=(m*16-p)*OneOver16; w:=LONG(exponent)*(LONG(u1)+LONG(u2)); (* need extra precision *) + + (* calculations below were modified to work properly -- incorrect in cited reference? *) + iw1:=ENTIER(16*w); w1:=iw1*OneOver16; w2:=SHORT(w-w1); + + (* check for overflow/underflow *) + IF iw1>XMAX THEN l.ErrorHandler(Overflow); RETURN huge + ELSIF iw1ZERO THEN INC(iw1); w2:=w2-OneOver16 END; IF iw1<0 THEN i:=0 ELSE i:=1 END; + mp:=div(iw1, 16)+i; pp:=16*mp-iw1; z:=((Q3*w2+Q2)*w2+Q1)*w2; z:=a1[pp+1]+a1[pp+1]*z; + RETURN l.scale(z, SHORT(mp)) +END power; + +PROCEDURE IsRMathException*(): BOOLEAN; + (* Returns TRUE if the current coroutine is in the exceptional execution state + because of the raising of the RealMath exception; otherwise returns FALSE. + *) +BEGIN + RETURN FALSE +END IsRMathException; + + +(* + Following routines are provided as extensions to the ISO standard. + They are either used as the basis of other functions or provide + useful functions which are not part of the ISO standard. +*) + +PROCEDURE log* (x, base: REAL): REAL; +(* log(x,base) is the logarithm of x base 'base'. All positive arguments are + allowed but base > 0 and base # 1 *) +BEGIN + (* log(x, base) = ln(x) / ln(base) *) + IF base<=ZERO THEN l.ErrorHandler(IllegalLogBase); RETURN -huge + ELSE RETURN ln(x)/ln(base) + END +END log; + +PROCEDURE ipower* (x: REAL; base: INTEGER): REAL; +(* ipower(x, base) returns the x to the integer power base where Log2(x) < expoMax *) + VAR Exp: INTEGER; y: REAL; neg: BOOLEAN; + + PROCEDURE Adjust(xadj: REAL): REAL; + BEGIN + IF (x0 THEN RETURN ZERO ELSE l.ErrorHandler(Overflow); RETURN Adjust(huge) END + END; + + (* trap potential overflows and underflows *) + Exp:=(l.exponent(x)+1)*base; y:=LnInfinity*ln2Inv; + IF Exp>y THEN l.ErrorHandler(Overflow); RETURN Adjust(huge) + ELSIF Exp<-y THEN RETURN ZERO + END; + + (* compute x**base using an optimised algorithm from Knuth, slightly + altered : p442, The Art Of Computer Programming, Vol 2 *) + y:=ONE; IF base<0 THEN neg:=TRUE; base := -base ELSE neg:= FALSE END; + LOOP + IF ODD(base) THEN y:=y*x END; + base:=base DIV 2; IF base=0 THEN EXIT END; + x:=x*x; + END; + IF neg THEN RETURN ONE/y ELSE RETURN y END +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) +END sincos; + +PROCEDURE arctan2* (xn, xd: REAL): REAL; +(* arctan2(xn,xd) is the quadrant-correct arc tangent atan(xn/xd). If the + denominator xd is zero, then the numerator xn must not be zero. All + arguments are legal except xn = xd = 0. *) +VAR + res: REAL; xpdiff: LONGINT; +BEGIN + (* check for error conditions *) + IF xd=ZERO THEN + IF xn=ZERO THEN l.ErrorHandler(IllegalTrig); RETURN ZERO + ELSIF xn<0 THEN RETURN -piByTwo + ELSE RETURN piByTwo + END; + ELSE + xpdiff:=l.exponent(xn)-l.exponent(xd); + IF ABS(xpdiff)>=l.expoMax-3 THEN + (* overflow detected *) + IF xn<0 THEN RETURN -piByTwo + ELSE RETURN piByTwo + END + ELSE + res:=ABS(xn/xd); + IF res#ZERO THEN res:=atan(res) END; + IF xdLnInfinity THEN (* handle exp overflows *) + y:=y-lnv; + IF y>LnInfinity-lnv+0.69 THEN l.ErrorHandler(Overflow); + IF x>ZERO THEN RETURN huge ELSE RETURN -huge END + ELSE f:=exp(y); f:=f+f*vbytwo (* don't change to f(1+vbytwo) *) + END + ELSE f:=exp(y); f:=(f-ONE/f)*HALF + END; + + (* reach here when 1 < ABS(x) < LnInfinity-lnv+0.69 *) + IF x>ZERO THEN RETURN f ELSE RETURN -f END +END sinh; + +PROCEDURE cosh* (x: REAL): REAL; +(* cosh(x) is the hyperbolic cosine of x. The argument x must not be so large + that exp(|x|) overflows. *) + VAR y, f: REAL; +BEGIN y:=ABS(x); + IF y>LnInfinity THEN (* handle exp overflows *) + y:=y-lnv; + IF y>LnInfinity-lnv+0.69 THEN l.ErrorHandler(Overflow); + IF x>ZERO THEN RETURN huge ELSE RETURN -huge END + ELSE f:=exp(y); RETURN f+f*vbytwo (* don't change to f(1+vbytwo) *) + END + ELSE f:=exp(y); RETURN (f+ONE/f)*HALF + END +END cosh; + +PROCEDURE tanh* (x: REAL): REAL; +(* tanh(x) is the hyperbolic tangent of x. All arguments are legal. *) + CONST P0=-0.8237728127; P1=-0.3831010665E-2; Q0=2.471319654; ln3over2=0.5493061443; + BIG=9.010913347; (* (ln(2)+(t+1)*ln(B))/2 where t=mantissa bits, B=base *) + VAR f, t: REAL; +BEGIN f:=ABS(x); + IF f>BIG THEN t:=ONE + ELSIF f>ln3over2 THEN t:=ONE-TWO/(exp(TWO*f)+ONE) + ELSIF fSqrtInfinity*HALF THEN l.ErrorHandler(HypInvTrigClipped); + IF x>ZERO THEN RETURN ln(SqrtInfinity) ELSE RETURN -ln(SqrtInfinity) END; + ELSIF xSqrtInfinity*HALF THEN l.ErrorHandler(HypInvTrigClipped); RETURN ln(SqrtInfinity) + ELSE RETURN ln(x+sqrt(x*x-ONE)) + END +END arccosh; + +PROCEDURE arctanh* (x: REAL): REAL; +(* arctanh(x) is the arc hyperbolic tangent of x. |x| < 1 - sqrt(em), where + em is machine epsilon. Note that |x| must not be so close to 1 that the + result is less accurate than half precision. *) + CONST TanhLimit=0.999984991; (* Tanh(5.9) *) + VAR t: REAL; +BEGIN t:=ABS(x); + IF (t>=ONE) OR (t>(ONE-TWO*em)) THEN l.ErrorHandler(IllegalHypInvTrig); + IF xTanhLimit THEN l.ErrorHandler(LossOfAccuracy) + END; + RETURN arcsinh(x/sqrt(ONE-x*x)) +END arctanh; + +BEGIN + (* determine some fundamental constants used by hyperbolic trig functions *) + em:=l.ulp(ONE); + LnInfinity:=ln(huge); + LnSmall:=ln(miny); + SqrtInfinity:=sqrt(huge); + t:=l.pred(ONE)/sqrt(em); TanhMax:=ln(t+sqrt(t*t+ONE)); + + (* initialize some tables for the power() function a1[i]=2**((1-i)/16) *) + a1[1] :=ONE; + a1[2] :=S.VAL(REAL, 3F75257DH); + a1[3] :=S.VAL(REAL, 3F6AC0C7H); + a1[4] :=S.VAL(REAL, 3F60CCDFH); + a1[5] :=S.VAL(REAL, 3F5744FDH); + a1[6] :=S.VAL(REAL, 3F4E248CH); + a1[7] :=S.VAL(REAL, 3F45672AH); + a1[8] :=S.VAL(REAL, 3F3D08A4H); + a1[9] :=S.VAL(REAL, 3F3504F3H); + a1[10]:=S.VAL(REAL, 3F2D583FH); + a1[11]:=S.VAL(REAL, 3F25FED7H); + a1[12]:=S.VAL(REAL, 3F1EF532H); + a1[13]:=S.VAL(REAL, 3F1837F0H); + a1[14]:=S.VAL(REAL, 3F11C3D3H); + a1[15]:=S.VAL(REAL, 3F0B95C2H); + a1[16]:=S.VAL(REAL, 3F05AAC3H); + a1[17]:=HALF; + + (* a2[i]=2**[(1-2i)/16] - a1[2i]; delta resolution *) + a2[1]:=S.VAL(REAL, 31A92436H); + a2[2]:=S.VAL(REAL, 336C2A95H); + a2[3]:=S.VAL(REAL, 31A8FC24H); + a2[4]:=S.VAL(REAL, 331F580CH); + a2[5]:=S.VAL(REAL, 336A42A1H); + a2[6]:=S.VAL(REAL, 32C12342H); + a2[7]:=S.VAL(REAL, 32E75624H); + a2[8]:=S.VAL(REAL, 32CF9890H) +END oocRealMath. diff --git a/voc.REMOVED.git-id b/voc.REMOVED.git-id index da3d00ff..a494cc2b 100644 --- a/voc.REMOVED.git-id +++ b/voc.REMOVED.git-id @@ -1 +1 @@ -fa4f569630633bf18b885d2dba015044a9039f7a \ No newline at end of file +eb7855c3da28b25bac66fa2b1632c6523dc6b801 \ No newline at end of file diff --git a/vocstatic.REMOVED.git-id b/vocstatic.REMOVED.git-id index da3d00ff..a494cc2b 100644 --- a/vocstatic.REMOVED.git-id +++ b/vocstatic.REMOVED.git-id @@ -1 +1 @@ -fa4f569630633bf18b885d2dba015044a9039f7a \ No newline at end of file +eb7855c3da28b25bac66fa2b1632c6523dc6b801 \ No newline at end of file