Outdated egg!
This is an egg for CHICKEN 4, the unsupported old release. You're almost certainly looking for the CHICKEN 5 version of this egg, if it exists.
If it does not exist, there may be equivalent functionality provided by another egg; have a look at the egg index. Otherwise, please consider porting this egg to the current version of CHICKEN.
mathh
- Outdated egg!
- mathh
- Documentation
- Math Functions
- Flonum Utilities
- Usage
- fprandom
- fpzero?
- fppositive?
- fpcardinal?
- fpnegative?
- fpeven?
- fpodd?
- fpclosed-right?
- fpclosedr?
- fpclosed?
- fpclosed-left?
- fpclosedl?
- fpadd1
- fpsub1
- fpmodulo
- fpquotient
- fpremainder
- fpfraction
- fptruncate/precision
- fpround/precision
- fpceiling/precision
- fpfloor/precision
- fp~=
- fp~<=
- fp~>=
- fpsqr
- fpcub
- fpdegree->radian
- fpradian->degree
- fpdistance
- fpdistance*
- fpmax-and-min
- fpprecision-factor
- Fixnum Utilities
- Math Constants (Module)
- Math Constants (Include)
- Notes
- Bugs and Limitations
- Author
- Version history
- License
Documentation
Provides access to ISO C math functions in <math.h> that are not defined by the Chicken core. Please refer to your documentation for <math.h> for a description of the various calls.
Math Functions
O, P2 are integer.
N, N1, N2, M are real.
Usage
(use "mathh")
bessel-j0
bessel-j1
bessel-jn
bessel-jn
bessel-y0
bessel-y1
bessel-yn
[procedure] (bessel-j0 N) -> real[procedure] (bessel-j1 N) -> real
[procedure] (bessel-jn O N) -> real
[procedure] (bessel-y0 N) -> real
[procedure] (bessel-y1 N) -> real
[procedure] (bessel-yn O N) -> real
cosh
sinh
tanh
acosh
asinh
atanh
[procedure] (cosh N) -> real[procedure] (sinh N) -> real
[procedure] (tanh N) -> real
[procedure] (acosh N) -> real
[procedure] (asinh N) -> real
[procedure] (atanh N) -> real
hypot
[procedure] (hypot N1 N2) -> realgamma
lgamma
[procedure] (gamma N) -> real[procedure] (lgamma N) -> real
erf
erfc
[procedure] (erf N) -> real[procedure] (erfc N) -> real
log10
log2
log1p
[procedure] (log10 N) -> real[procedure] (log2 N) -> real
[procedure] (log1p N) -> real
log-with-base
[procedure] (log-with-base N) -> (procedure (real) real)Returns a monadic function, the logarithm of base N.
ldexp
scalbn
[procedure] (ldexp N P2) -> real[procedure] (scalbn N P2) -> real
cbrt
[procedure] (cbrt N) -> realnextafter
[procedure] (nextafter N M) -> realReturns the next N in the direction of M.
fpmod
[procedure] (fpmod N M) -> realReturns the modulus of N for M.
modf
[procedure] (modf N) -> (values real integer)Returns two values, the integral and fractional components of N.
frexp
[procedure] (frexp N) -> (values real real)Returns two values, the fraction and the exponent components of N.
signbit
[procedure] (signbit N) -> booleanReturns #t when negative, #f otherwise.
copysign
[procedure] (copysign N M) -> realReturns N with same sign as M.
fpclassify
[procedure] (fpclassify N) -> symbolReturns a symbol denoting the floating-point kind of N.
- infinite
- nan
- normal
- subnormal
- zero
- unclassified
fpclass
[procedure] (fpclass N) -> symbolReturns a symbol denoting the floating-point kind of N.
- positive-infinite
- negative-infinite
- quiet-nan
- signaling-nan
- positive-normal
- negative-normal
- positive-subnormal
- negative-subnormal
- positive-zero
- negative-zero
- unclassified
Flonum Utilities
Usage
(require-extension fp-utils)
N N1 ... X1 ... Y1 ... below are flonum.
P is the precision in decimal digits, an integer.
fprandom
[procedure] (fprandom [N]) -> flonumReturns flonum in [0 -1).
- N
- fixnum or flonum limit.
fpzero?
[procedure] (fpzero? N) -> booleanfppositive?
[procedure] (fppositive? N) -> booleanNote that -0.0 is not positive, due to (fl<? -0.0 0.0).
fpcardinal?
[procedure] (fpcardinal? N) -> booleanNote that -0.0 is not cardinal, due to (fl<? -0.0 0.0).
fpnegative?
[procedure] (fpnegative? N) -> booleanNote that -0.0 is not negative, due to (fl<? -0.0 0.0).
fpeven?
[procedure] (fpeven? N) -> booleanfpodd?
[procedure] (fpodd? N) -> booleanfpclosed-right?
fpclosedr?
[procedure] (fpclosed-right? L N H) -> boolean[procedure] (fpclosedr? L N H) -> boolean
Returns N in (L .. H].
N, L & H are flonum low & high limits.
fpclosed?
Returns N in [L .. H].
[procedure] (fpclosed? L N H) -> booleanN, L & H are flonum low & high limits.
fpclosed-left?
fpclosedl?
Returns N in [L .. H).
[procedure] (fpclosed-left? L N H) -> boolean[procedure] (fpclosedl? L N H) -> boolean
N, L & H are flonum low & high limits.
fpadd1
[procedure] (fpadd1 N) -> flonumfpsub1
[procedure] (fpsub1 N) -> flonumfpmodulo
[procedure] (fpmodulo N1 N2) -> flonumfpquotient
[procedure] (fpquotient N1 N2) -> flonumfpremainder
[procedure] (fpremainder N1 N2) -> flonumfpfraction
[procedure] (fpfraction N) -> flonumfptruncate/precision
[procedure] (fptruncate/precision N [P 4]) -> flonumfpround/precision
[procedure] (fpround/precision N [P 4]) -> flonumfpceiling/precision
[procedure] (fpceiling/precision N [P 4]) -> flonumfpfloor/precision
[procedure] (fpfloor/precision N [P 4]) -> flonumfp~=
[procedure] (fp~= N1 N2 [EPS flonum-epsilon]) -> flonumCompare floating-point values N1 and N2 within some flonum epsilon EPS.
fp~<=
[procedure] (fp~<= N) -> booleanfp~>=
[procedure] (fp~>= N) -> booleanfpsqr
[procedure] (fpsqr N) -> flonumfpcub
[procedure] (fpcub N) -> flonumfpdegree->radian
[procedure] (fpdegree->radian N) -> flonumfpradian->degree
[procedure] (fpradian->degree N) -> flonumfpdistance
[procedure] (fpdistance X1 Y1 X2 Y2) -> flonumPythagorean distance between the points X1 Y1 and X2 Y2.
fpdistance*
[procedure] (fpdistance* X1 Y1 X2 Y2) -> flonumPythagorean distance, inaccurate but useful for relative comparisons.
fpmax-and-min
[procedure] (fpmax-and-min N ...) -> (values flonum flonum)Returns the maximum & minimum values for the flonums N ....
fpprecision-factor
[procedure] (fpprecision-factor P [BASE 10.0]) -> flonumReturns factor for P decimal digits precision.
Fixnum Utilities
Usage
(require-extension fx-utils)
N N1 ... X1 ... Y1 ... below are fixnum.
fxrandom
[procedure] (fxrandom [N]) -> fixnumN fixnum limit.
fxzero?
[procedure] (fxzero? N) -> booleanfxpositive?
[procedure] (fxpositive? N) -> booleanfxcardinal?
[procedure] (fxcardinal? N) -> booleanfxnegative?
[procedure] (fxnegative? N) -> booleanfxclosed-right?
fxclosedr?
[procedure] (fxclosed-right? L N H) -> boolean[procedure] (fxclosedr? L N H) -> boolean
Returns N in (L .. H].
N, L & H are fixnum low & high limits.
fxclosed?
Returns N in [L .. H].
[procedure] (fxclosed? L N H) -> booleanN, L & H are fixnum low & high limits.
fxclosed-left?
fxclosedl?
Returns N in [L .. H).
[procedure] (fxclosed-left? L N H) -> boolean[procedure] (fxclosedl? L N H) -> boolean
N, L & H are fixnum low & high limits.
fxadd1
[procedure] (fxadd1 N) -> fixnumfxsub1
[procedure] (fxsub1 N) -> fixnumfxabs
[procedure] (fxabs N) -> fixnumfxsqr
[procedure] (fxsqr N) -> fixnumfxcub
[procedure] (fxcub N) -> fixnumfxlog2
[procedure] (fxlog2 N) -> fixnumReturns index of highest bit set, so N is treated as unsigned.
fxpow2log2
[procedure] (fxpow2log2 N) -> fixnumReturns fixnum 2^N.
fxdistance
[procedure] (fxdistance X1 Y1 X2 Y2) -> fixnumPythagorean distance between the points X1 Y1 and X2 Y2.
fxdistance*
[procedure] (fxdistance* X1 Y1 X2 Y2) -> fixnumPythagorean distance, inaccurate but useful for relative comparisons.
fxmax-and-min
[procedure] (fxmax-and-min N ...) -> (values fixnum fixnum)Returns the maximum & minimum values for the fixnums N ....
Math Constants (Module)
Usage
(require-extension mathh-consts)
Constants
These are all flonum.
- e
- e
- 1/e
- 1/e
- e^2
- e^2
- e^pi/4
- e^(pi/4)
- log2e
- log2(e)
- log10e
- log10(e)
- ln2
- log(2)
- ln3
- ln(3)
- lnpi
- ln(pi)
- ln10
- log(10)
- 1/ln2
- 1/ln(2)
- 1/ln10
- 1/ln(10)
- pi
- pi
- pi/2
- pi/2
- pi/4
- pi/4
- 1/pi
- 1/pi
- 2/pi
- 2/pi
- 2/sqrtpi
- 2/sqrt(pi)
- sqrtpi
- sqrt(pi)
- pi^2
- pi^2
- degree
- pi/180
- sqrt2
- sqrt(2)
- 1/sqrt2
- 1/sqrt(2)
- sqrt3
- sqrt(3)
- sqrt5
- sqrt(5)
- sqrt10
- sqrt(10)
- cubert2
- cubert(2)
- cubert3
- cubert(3)
- 4thrt2
- fourthrt(2)
- gamma1/2
- gamma(1/2)
- gamma1/3
- gamma(1/3)
- gamma2/3
- gamma(2/3)
- phi
- phi
- lnphi
- ln(phi)
- 1/lnphi
- 1/ln(phi)
- euler
- euler
- e^euler
- e^euler
- sin1
- sin(1)
- cos1
- cos(1)
- zeta3
- theta(3)
Math Constants (Include)
Common constants, using 'define-constant'. As such they must be textually included.
Usage
(include "mathh-constants")
Constants
- E
- e
- 1/E
- 1/e
- E^2
- e^2
- E^PI/4
- e^(pi/4)
- LOG2E
- log2(e)
- LOG10E
- log10(e)
- LN2
- log(2)
- LN3
- ln(3)
- LNPI
- ln(pi)
- LN10
- log(10)
- 1/LN2
- 1/ln(2)
- 1/LN10
- 1/ln(10)
- PI
- pi
- PI/2
- pi/2
- PI/4
- pi/4
- 1/PI
- 1/pi
- 2/PI
- 2/pi
- 2/SQRTPI
- 2/sqrt(pi)
- SQRTPI
- sqrt(pi)
- PI^2
- pi^2
- DEGREE
- pi/180
- SQRT2
- sqrt(2)
- 1/SQRT2
- 1/sqrt(2)
- SQRT3
- sqrt(3)
- SQRT5
- sqrt(5)
- SQRT10
- sqrt(10)
- CUBERT2
- cubert(2)
- CUBERT3
- cubert(3)
- 4THRT2
- fourthrt(2)
- GAMMA1/2
- gamma(1/2)
- GAMMA1/3
- gamma(1/3)
- GAMMA2/3
- gamma(2/3)
- PHI
- phi
- LNPHI
- ln(phi)
- 1/LNPHI
- 1/ln(phi)
- EULER
- euler
- E^EULER
- e^euler
- SIN1
- sin(1)
- COS1
- cos(1)
- ZETA3
- theta(3)
Notes
- The C library call gamma is deprecated in favor of tgamma but not available yet on some platforms, so we use gamma where necessary.
- Some library calls that are not supplied by the platform have rough implementations supplied. See Bugs and Limitations.
- The general naming convention is to use the C library call name as the Scheme name. But there are exceptions:
- fmod
- fpmod - fp-utils fpmodulo - should be in Chicken library?
- j0
- bessel-j0 (Prefixed to distinguish the names from common variables)
- j1
- bessel-j1
- jn
- bessel-jn
- y0
- bessel-y0
- y1
- bessel-y1
- yn
- bessel-yn
Bugs and Limitations
- CHICKEN_INCLUDE_PATH must at least state the value of the (repository-path) to include mathh-constants.scm. Suggest using the module mathh-consts.
- The types integer & real refer to the Chicken "core" concept of a number. Support for the full numeric tower is not provided.
- Windows library calls lgamma, gamma, acosh, asinh, atanh, cbrt & signbit are not provided.
- FreeBSD does not provide the library call log2. A usable log2 is supplied.
- The fpclass quiet-nan is only distinguished on Windows.
- fx-utils.scm & fp-utils.scm belong in own eggs.
Author
Version history
- 3.4.2
- Fix foreign-declare use. Fix fpzero?, fppositive?, fpnegative?, fpcardinal? again.
- 3.4.1
- Remove unneeded dependency.
- 3.4.0 ; Fix fppositive?, fpnegative?, fpcardinal?, fpeven?, fpodd?.
- 3.3.3 ; Remove Windows log2, log1p, erf, erfc, scalbn.
- 3.3.2 ;
- 3.3.1 ;
- 3.3.0 ; Add log-with-base. Deprecate make-log/base. Fix fprandom sign preservation.
- 3.2.4 ; Add fxlog2, fix fxpow2log2.
- 3.2.3 ; Fix 4THRT2, 1/LNPHI, extend 1/SQRT2.
- 3.2.2 ; Remove inline generation for mathh.
- 3.2.1 ; Add types. Fix signbit & fpclass.
- 3.2.0 ; Fix fpodd?. Add fx-utils.scm. Extend fp-utils.scm.
- 3.1.0 ; Added module for mathh-constants.scm.
- 3.0.0 ; Moved copy of mathh-constants.scm to (chicken-home). Ticket #1327
- 2.2.6 ; better argvector chicken test
- 2.2.5 ; argvector chicken support
- 2.2.4 ;
- 2.2.3 ; Fix for ticket #630
- 2.2.2 ; mathh-constants.scm copied to Chicken Repository. Produces shared+static object files.
- 2.2.1
- Better no-install support.
- 2.2.0
- Added acosh, asinh, atanh, erf & erfc. Includes <sunmath.h> on Sun platform for log2.
- 2.1.0
- Added signbit, copysign, nextafter & cbrt.
- 2.0.0
- Chicken 4 release. fpclass and fpclassify are now part of the mathh extension.
License
This code is in the public domain.