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

  1. Outdated egg!
  2. mathh
  3. Documentation
    1. Math Functions
      1. Usage
      2. bessel-j0
      3. bessel-j1
      4. bessel-jn
      5. bessel-jn
      6. bessel-y0
      7. bessel-y1
      8. bessel-yn
      9. cosh
      10. sinh
      11. tanh
      12. acosh
      13. asinh
      14. atanh
      15. hypot
      16. gamma
      17. lgamma
      18. erf
      19. erfc
      20. log10
      21. log2
      22. log1p
      23. log-with-base
      24. ldexp
      25. scalbn
      26. cbrt
      27. nextafter
      28. fpmod
      29. modf
      30. frexp
      31. signbit
      32. copysign
      33. fpclassify
      34. fpclass
    2. Flonum Utilities
      1. Usage
      2. fprandom
      3. fpzero?
      4. fppositive?
      5. fpcardinal?
      6. fpnegative?
      7. fpeven?
      8. fpodd?
      9. fpclosed-right?
      10. fpclosedr?
      11. fpclosed?
      12. fpclosed-left?
      13. fpclosedl?
      14. fpadd1
      15. fpsub1
      16. fpmodulo
      17. fpquotient
      18. fpremainder
      19. fpfraction
      20. fptruncate/precision
      21. fpround/precision
      22. fpceiling/precision
      23. fpfloor/precision
      24. fp~=
      25. fp~<=
      26. fp~>=
      27. fpsqr
      28. fpcub
      29. fpdegree->radian
      30. fpradian->degree
      31. fpdistance
      32. fpdistance*
      33. fpmax-and-min
      34. fpprecision-factor
    3. Fixnum Utilities
      1. Usage
      2. fxrandom
      3. fxzero?
      4. fxpositive?
      5. fxcardinal?
      6. fxnegative?
      7. fxclosed-right?
      8. fxclosedr?
      9. fxclosed?
      10. fxclosed-left?
      11. fxclosedl?
      12. fxadd1
      13. fxsub1
      14. fxabs
      15. fxsqr
      16. fxcub
      17. fxlog2
      18. fxpow2log2
      19. fxdistance
      20. fxdistance*
      21. fxmax-and-min
    4. Math Constants (Module)
      1. Usage
      2. Constants
    5. Math Constants (Include)
      1. Usage
      2. Constants
  4. Notes
  5. Bugs and Limitations
  6. Author
  7. Version history
  8. 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) -> real

gamma

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) -> real

nextafter

[procedure] (nextafter N M) -> real

Returns the next N in the direction of M.

fpmod

[procedure] (fpmod N M) -> real

Returns 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) -> boolean

Returns #t when negative, #f otherwise.

copysign

[procedure] (copysign N M) -> real

Returns N with same sign as M.

fpclassify

[procedure] (fpclassify N) -> symbol

Returns a symbol denoting the floating-point kind of N.

infinite
nan
normal
subnormal
zero
unclassified

fpclass

[procedure] (fpclass N) -> symbol

Returns 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]) -> flonum

Returns flonum in [0 -1).

N
fixnum or flonum limit.

fpzero?

[procedure] (fpzero? N) -> boolean

fppositive?

[procedure] (fppositive? N) -> boolean

Note that -0.0 is not positive, due to (fl<? -0.0 0.0).

fpcardinal?

[procedure] (fpcardinal? N) -> boolean

Note that -0.0 is not cardinal, due to (fl<? -0.0 0.0).

fpnegative?

[procedure] (fpnegative? N) -> boolean

Note that -0.0 is not negative, due to (fl<? -0.0 0.0).

fpeven?

[procedure] (fpeven? N) -> boolean

fpodd?

[procedure] (fpodd? N) -> boolean

fpclosed-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) -> boolean

N, 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) -> flonum

fpsub1

[procedure] (fpsub1 N) -> flonum

fpmodulo

[procedure] (fpmodulo N1 N2) -> flonum

fpquotient

[procedure] (fpquotient N1 N2) -> flonum

fpremainder

[procedure] (fpremainder N1 N2) -> flonum

fpfraction

[procedure] (fpfraction N) -> flonum

fptruncate/precision

[procedure] (fptruncate/precision N [P 4]) -> flonum

fpround/precision

[procedure] (fpround/precision N [P 4]) -> flonum

fpceiling/precision

[procedure] (fpceiling/precision N [P 4]) -> flonum

fpfloor/precision

[procedure] (fpfloor/precision N [P 4]) -> flonum

fp~=

[procedure] (fp~= N1 N2 [EPS flonum-epsilon]) -> flonum

Compare floating-point values N1 and N2 within some flonum epsilon EPS.

fp~<=

[procedure] (fp~<= N) -> boolean

fp~>=

[procedure] (fp~>= N) -> boolean

fpsqr

[procedure] (fpsqr N) -> flonum

fpcub

[procedure] (fpcub N) -> flonum

fpdegree->radian

[procedure] (fpdegree->radian N) -> flonum

fpradian->degree

[procedure] (fpradian->degree N) -> flonum

fpdistance

[procedure] (fpdistance X1 Y1 X2 Y2) -> flonum

Pythagorean distance between the points X1 Y1 and X2 Y2.

fpdistance*

[procedure] (fpdistance* X1 Y1 X2 Y2) -> flonum

Pythagorean 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]) -> flonum

Returns factor for P decimal digits precision.

Fixnum Utilities

Usage

(require-extension fx-utils)

N N1 ... X1 ... Y1 ... below are fixnum.

fxrandom

[procedure] (fxrandom [N]) -> fixnum

N fixnum limit.

fxzero?

[procedure] (fxzero? N) -> boolean

fxpositive?

[procedure] (fxpositive? N) -> boolean

fxcardinal?

[procedure] (fxcardinal? N) -> boolean

fxnegative?

[procedure] (fxnegative? N) -> boolean

fxclosed-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) -> boolean

N, 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) -> fixnum

fxsub1

[procedure] (fxsub1 N) -> fixnum

fxabs

[procedure] (fxabs N) -> fixnum

fxsqr

[procedure] (fxsqr N) -> fixnum

fxcub

[procedure] (fxcub N) -> fixnum

fxlog2

[procedure] (fxlog2 N) -> fixnum

Returns index of highest bit set, so N is treated as unsigned.

fxpow2log2

[procedure] (fxpow2log2 N) -> fixnum

Returns fixnum 2^N.

fxdistance

[procedure] (fxdistance X1 Y1 X2 Y2) -> fixnum

Pythagorean distance between the points X1 Y1 and X2 Y2.

fxdistance*

[procedure] (fxdistance* X1 Y1 X2 Y2) -> fixnum

Pythagorean 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

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

Author

Kon Lovett John Cowan

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.