You are looking at historical revision 39572 of this page. It may differ significantly from its current revision.
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.