# module Math

## Defined in:

big/big_float.cr
big/big_int.cr
big/big_rational.cr
complex.cr
math/math.cr

## Constant Summary

E = `LibM.exp_f64(1.0)`

Euler's number (e).

LOG10 = `LibM.log_f64(10.0)`
LOG2 = `LibM.log_f64(2.0)`
PI = `3.14159265358979323846`

Archimedes' constant (π).

TAU = `6.283185307179586476925`

The full circle constant (τ), equal to 2π.

## Instance Method Detail

def acos(value : Float32) : Float32 #

Calculates the arc cosine of value.

def acos(value : Float64) : Float64 #

Calculates the arc cosine of value.

def acos(value) #

Calculates the arc cosine of value.

def acosh(value : Float32) : Float32 #

Calculates the inverse hyperbolic cosine of value.

def acosh(value : Float64) : Float64 #

Calculates the inverse hyperbolic cosine of value.

def acosh(value) #

Calculates the inverse hyperbolic cosine of value.

def asin(value : Float32) : Float32 #

Calculates the arc sine of value.

def asin(value : Float64) : Float64 #

Calculates the arc sine of value.

def asin(value) #

Calculates the arc sine of value.

def asinh(value : Float32) : Float32 #

Calculates the inverse hyperbolic sine of value.

def asinh(value : Float64) : Float64 #

Calculates the inverse hyperbolic sine of value.

def asinh(value) #

Calculates the inverse hyperbolic sine of value.

def atan(value : Float32) : Float32 #

Calculates the arc tangent of value.

def atan(value : Float64) : Float64 #

Calculates the arc tangent of value.

def atan(value) #

Calculates the arc tangent of value.

def atan2(y : Float32, x : Float32) : Float32 #

Calculates the two-argument arc tangent of the ray from (0, 0) to (x, y).

def atan2(y : Float64, x : Float64) : Float64 #

Calculates the two-argument arc tangent of the ray from (0, 0) to (x, y).

def atan2(y, x) : Float64 #

Calculates the two-argument arc tangent of the ray from (0, 0) to (x, y).

def atanh(value : Float32) : Float32 #

Calculates the inverse hyperbolic tangent of value.

def atanh(value : Float64) : Float64 #

Calculates the inverse hyperbolic tangent of value.

def atanh(value) #

Calculates the inverse hyperbolic tangent of value.

def besselj(order : Int32, value : Float32) #

Calculates the cylindrical Bessel function of the first kind of value for the given order.

def besselj(order : Int32, value : Float64) : Float64 #

Calculates the cylindrical Bessel function of the first kind of value for the given order.

def besselj(order, value) #

Calculates the cylindrical Bessel function of the first kind of value for the given order.

def besselj0(value : Float32) #

Calculates the cylindrical Bessel function of the first kind of value for order 0.

def besselj0(value : Float64) : Float64 #

Calculates the cylindrical Bessel function of the first kind of value for order 0.

def besselj0(value) #

Calculates the cylindrical Bessel function of the first kind of value for order 0.

def besselj1(value : Float32) #

Calculates the cylindrical Bessel function of the first kind of value for order 1.

def besselj1(value : Float64) : Float64 #

Calculates the cylindrical Bessel function of the first kind of value for order 1.

def besselj1(value) #

Calculates the cylindrical Bessel function of the first kind of value for order 1.

def bessely(order : Int32, value : Float32) #

Calculates the cylindrical Bessel function of the second kind of value for the given order.

def bessely(order : Int32, value : Float64) : Float64 #

Calculates the cylindrical Bessel function of the second kind of value for the given order.

def bessely(order, value) #

Calculates the cylindrical Bessel function of the second kind of value for the given order.

def bessely0(value : Float32) #

Calculates the cylindrical Bessel function of the second kind of value for order 0.

def bessely0(value : Float64) : Float64 #

Calculates the cylindrical Bessel function of the second kind of value for order 0.

def bessely0(value) #

Calculates the cylindrical Bessel function of the second kind of value for order 0.

def bessely1(value : Float32) #

Calculates the cylindrical Bessel function of the second kind of value for order 1.

def bessely1(value : Float64) : Float64 #

Calculates the cylindrical Bessel function of the second kind of value for order 1.

def bessely1(value) #

Calculates the cylindrical Bessel function of the second kind of value for order 1.

def cbrt(value : Float32) : Float32 #

Calculates the cubic root of value.

def cbrt(value : Float64) : Float64 #

Calculates the cubic root of value.

def cbrt(value) #

Calculates the cubic root of value.

def copysign(value1 : Float32, value2 : Float32) #

Returns the floating-point value with the magnitude of value1 and the sign of value2.

def copysign(value1 : Float64, value2 : Float64) : Float64 #

Returns the floating-point value with the magnitude of value1 and the sign of value2.

def copysign(value1, value2) #

Returns the floating-point value with the magnitude of value1 and the sign of value2.

def cos(value : Float32) : Float32 #

Calculates the cosine of value, measured in radians.

def cos(value : Float64) : Float64 #

Calculates the cosine of value, measured in radians.

def cos(value) #

Calculates the cosine of value, measured in radians.

def cosh(value : Float32) : Float32 #

Calculates the hyperbolic cosine of value.

def cosh(value : Float64) : Float64 #

Calculates the hyperbolic cosine of value.

def cosh(value) #

Calculates the hyperbolic cosine of value.

def erf(value : Float32) : Float32 #

Calculates the error function of value.

def erf(value : Float64) : Float64 #

Calculates the error function of value.

def erf(value) #

Calculates the error function of value.

def erfc(value : Float32) : Float32 #

Calculates 1 minus the error function of value.

def erfc(value : Float64) : Float64 #

Calculates 1 minus the error function of value.

def erfc(value) #

Calculates 1 minus the error function of value.

def exp(value : Float32) : Float32 #

Calculates the exponential of value.

def exp(value : Float64) : Float64 #

Calculates the exponential of value.

def exp(value : Complex) : Complex #

Calculates the exponential of value.

``````require "complex"

Math.exp(4 + 2.i) # => -22.720847417619233 + 49.645957334580565i``````

def exp(value) #

Calculates the exponential of value.

def exp2(value : Float32) : Float32 #

Calculates 2 raised to the power value.

def exp2(value : Float64) : Float64 #

Calculates 2 raised to the power value.

def exp2(value) #

Calculates 2 raised to the power value.

def expm1(value : Float32) : Float32 #

Calculates the exponential of value, minus 1.

def expm1(value : Float64) : Float64 #

Calculates the exponential of value, minus 1.

def expm1(value) #

Calculates the exponential of value, minus 1.

def frexp(value : Float32) : Tuple(Float32, Int32) #

Decomposes the given floating-point value into a normalized fraction and an integral power of two.

def frexp(value : Float64) : Tuple(Float64, Int32) #

Decomposes the given floating-point value into a normalized fraction and an integral power of two.

def frexp(value : BigFloat) : Tuple(BigFloat, Int32 | Int64) #

Decomposes the given floating-point value into a normalized fraction and an integral power of two.

def frexp(value) #

Decomposes the given floating-point value into a normalized fraction and an integral power of two.

def gamma(value : Float32) : Float32 #

Calculates the gamma function of value.

Note that `#gamma(n)` is same as `fact(n - 1)` for integer `n > 0`. However `#gamma(n)` returns float and can be an approximation.

def gamma(value : Float64) : Float64 #

Calculates the gamma function of value.

Note that `#gamma(n)` is same as `fact(n - 1)` for integer `n > 0`. However `#gamma(n)` returns float and can be an approximation.

def gamma(value) : Float64 #

Calculates the gamma function of value.

Note that `#gamma(n)` is same as `fact(n - 1)` for integer `n > 0`. However `#gamma(n)` returns float and can be an approximation.

def hypot(value1 : Float32, value2 : Float32) : Float32 #

Calculates the length of the hypotenuse from (0, 0) to (value1, value2).

Equivalent to

``Math.sqrt(value1 ** 2 + value2 ** 2)``

def hypot(value1 : Float64, value2 : Float64) : Float64 #

Calculates the length of the hypotenuse from (0, 0) to (value1, value2).

Equivalent to

``Math.sqrt(value1 ** 2 + value2 ** 2)``

def hypot(value1, value2) #

Calculates the length of the hypotenuse from (0, 0) to (value1, value2).

Equivalent to

``Math.sqrt(value1 ** 2 + value2 ** 2)``

def ilogb(value : Float32) : Int32 #

Returns the unbiased base 2 exponent of the given floating-point value.

def ilogb(value : Float64) : Int32 #

Returns the unbiased base 2 exponent of the given floating-point value.

def ilogb(value) #

Returns the unbiased base 2 exponent of the given floating-point value.

def ldexp(value : Float32, exp : Int32) : Float32 #

Multiplies the given floating-point value by 2 raised to the power exp.

def ldexp(value : Float64, exp : Int32) : Float64 #

Multiplies the given floating-point value by 2 raised to the power exp.

def ldexp(value, exp) #

Multiplies the given floating-point value by 2 raised to the power exp.

def lgamma(value : Float32) #

Calculates the logarithmic gamma of value.

``Math.lgamma(2.96)``

is equivalent to

``Math.log(Math.gamma(2.96).abs)``

def lgamma(value : Float64) : Float64 #

Calculates the logarithmic gamma of value.

``Math.lgamma(2.96)``

is equivalent to

``Math.log(Math.gamma(2.96).abs)``

def lgamma(value) : Float64 #

Calculates the logarithmic gamma of value.

``Math.lgamma(2.96)``

is equivalent to

``Math.log(Math.gamma(2.96).abs)``

def log(value, base) #

Calculates the logarithm of value to the given base.

def log(value : Float32) : Float32 #

Calculates the natural logarithm of value.

def log(value : Float64) : Float64 #

Calculates the natural logarithm of value.

def log(value : Complex) : Complex #

Calculates the natural logarithm of value.

``````require "complex"

Math.log(4 + 2.i) # => 1.4978661367769956 + 0.4636476090008061i``````

def log(value) : Float64 #

Calculates the natural logarithm of value.

def log10(value : Float32) : Float32 #

Calculates the logarithm of value to base 10.

def log10(value : Float64) : Float64 #

Calculates the logarithm of value to base 10.

def log10(value : Complex) : Complex #

Calculates the logarithm of value to base 10.

``````require "complex"

Math.log10(4 + 2.i) # => 0.6505149978319906 + 0.20135959813668655i``````

def log10(value) #

Calculates the logarithm of value to base 10.

def log1p(value : Float32) : Float32 #

Calculates the natural logarithm of 1 plus value.

def log1p(value : Float64) : Float64 #

Calculates the natural logarithm of 1 plus value.

def log1p(value) #

Calculates the natural logarithm of 1 plus value.

def log2(value : Float32) : Float32 #

Calculates the logarithm of value to base 2.

def log2(value : Float64) : Float64 #

Calculates the logarithm of value to base 2.

def log2(value : Complex) : Complex #

Calculates the logarithm of value to base 2.

``````require "complex"

Math.log2(4 + 2.i) # => 2.1609640474436813 + 0.6689021062254881i``````

def log2(value) : Float64 #

Calculates the logarithm of value to base 2.

def logb(value : Float32) : Float32 #

Returns the unbiased radix-independent exponent of the given floating-point value.

For `Float32` and `Float64` this is equivalent to `#ilogb`.

def logb(value : Float64) : Float64 #

Returns the unbiased radix-independent exponent of the given floating-point value.

For `Float32` and `Float64` this is equivalent to `#ilogb`.

def logb(value) #

Returns the unbiased radix-independent exponent of the given floating-point value.

For `Float32` and `Float64` this is equivalent to `#ilogb`.

def max(value1 : Float32, value2 : Float32) #

Returns the greater of value1 and value2.

def max(value1 : Float64, value2 : Float64) : Float64 #

Returns the greater of value1 and value2.

def max(value1, value2) #

Returns the greater of value1 and value2.

def min(value1 : Float32, value2 : Float32) #

Returns the smaller of value1 and value2.

def min(value1 : Float64, value2 : Float64) : Float64 #

Returns the smaller of value1 and value2.

def min(value1, value2) #

Returns the smaller of value1 and value2.

def pw2ceil(v : Int32) #

Computes the next highest power of 2 of v.

``Math.pw2ceil(33) # => 64``

def pw2ceil(v : Int64) #

def scalbln(value : Float32, exp : Int64) #

Returns the floating-point value with its exponent raised by exp.

For `Float32` and `Float64` this is equivalent to `#ldexp`.

def scalbln(value : Float64, exp : Int64) : Float64 #

Returns the floating-point value with its exponent raised by exp.

For `Float32` and `Float64` this is equivalent to `#ldexp`.

def scalbln(value, exp) : Float64 #

Returns the floating-point value with its exponent raised by exp.

For `Float32` and `Float64` this is equivalent to `#ldexp`.

def scalbn(value : Float32, exp : Int32) : Float32 #

Returns the floating-point value with its exponent raised by exp.

For `Float32` and `Float64` this is equivalent to `#ldexp`.

def scalbn(value : Float64, exp : Int32) : Float64 #

Returns the floating-point value with its exponent raised by exp.

For `Float32` and `Float64` this is equivalent to `#ldexp`.

def scalbn(value, exp) #

Returns the floating-point value with its exponent raised by exp.

For `Float32` and `Float64` this is equivalent to `#ldexp`.

def sin(value : Float32) : Float32 #

Calculates the sine of value, measured in radians.

def sin(value : Float64) : Float64 #

Calculates the sine of value, measured in radians.

def sin(value) #

Calculates the sine of value, measured in radians.

def sinh(value : Float32) : Float32 #

Calculates the hyperbolic sine of value.

def sinh(value : Float64) : Float64 #

Calculates the hyperbolic sine of value.

def sinh(value) #

Calculates the hyperbolic sine of value.

def sqrt(value : Float32) : Float32 #

Calculates the square root of value.

def sqrt(value : Float64) : Float64 #

Calculates the square root of value.

def sqrt(value : BigInt) : BigFloat #

Calculates the square root of value.

``````require "big"

Math.sqrt(1_000_000_000_000.to_big_i * 1_000_000_000_000.to_big_i) # => 1000000000000.0``````

def sqrt(value : BigFloat) : BigFloat #

Calculates the square root of value.

``````require "big"

Math.sqrt(1_000_000_000_000.to_big_f * 1_000_000_000_000.to_big_f) # => 1000000000000.0``````

def sqrt(value : BigRational) : BigFloat #

Calculates the square root of value.

``````require "big"

Math.sqrt(1_000_000_000_000.to_big_r * 1_000_000_000_000.to_big_r) # => 1000000000000.0``````

def sqrt(value : Complex) : Complex #

Calculates the square root of value. Inspired by the following blog post of Pavel Panchekha on floating point precision.

``````require "complex"

Math.sqrt(4 + 2.i) # => 2.0581710272714924 + 0.48586827175664565i``````

Although the imaginary number is defined as i = sqrt(-1), calling `Math.sqrt` with a negative number will return `-NaN`. To obtain the result in the complex plane, `Math.sqrt` must be called with a complex number.

``````Math.sqrt(-1.0)         # => -NaN
Math.sqrt(-1.0 + 0.0.i) # => 0.0 + 1.0i``````

def sqrt(value) : Float64 #

Calculates the square root of value.

def tan(value : Float32) : Float32 #

Calculates the tangent of value, measured in radians.

def tan(value : Float64) : Float64 #

Calculates the tangent of value, measured in radians.

def tan(value) #

Calculates the tangent of value, measured in radians.

def tanh(value : Float32) : Float32 #

Calculates the hyperbolic tangent of value.

def tanh(value : Float64) : Float64 #

Calculates the hyperbolic tangent of value.

def tanh(value) #

Calculates the hyperbolic tangent of value.