module Math
Module Math provides methods for basic trigonometric, logarithmic, and transcendental functions, and for extracting roots.
You can write its constants and method calls thus:
Math::PI # => 3.141592653589793 Math::E # => 2.718281828459045 Math.sin(0.0) # => 0.0 Math.cos(0.0) # => 1.0
If you include module Math, you can write simpler forms:
include Math PI # => 3.141592653589793 E # => 2.718281828459045 sin(0.0) # => 0.0 cos(0.0) # => 1.0
For simplicity, the examples here assume:
include Math INFINITY = Float::INFINITY
The domains and ranges for the methods are denoted by open or closed intervals, using, respectively, parentheses or square brackets:
-
An open interval does not include the endpoints:
(-INFINITY, INFINITY)
-
A closed interval includes the endpoints:
[-1.0, 1.0]
-
A half-open interval includes one endpoint, but not the other:
[1.0, INFINITY)
Many values returned by Math methods are numerical approximations. This is because many such values are, in mathematics, of infinite precision, while in numerical computation the precision is finite.
Thus, in mathematics, cos(π/2) is exactly zero, but in our computation cos(PI/2) is a number very close to zero:
cos(PI/2) # => 6.123031769111886e-17
For very large and very small returned values, we have added formatted numbers for clarity:
tan(PI/2) # => 1.633123935319537e+16 # 16331239353195370.0 tan(PI) # => -1.2246467991473532e-16 # -0.0000000000000001
See class Float for the constants that affect Ruby’s floating-point arithmetic.
What’s Here
Trigonometric Functions
-
::cos: Returns the cosine of the given argument. -
::sin: Returns the sine of the given argument. -
::tan: Returns the tangent of the given argument.
Inverse Trigonometric Functions
-
::acos: Returns the arc cosine of the given argument. -
::asin: Returns the arc sine of the given argument. -
::atan: Returns the arc tangent of the given argument. -
::atan2: Returns the arg tangent of two given arguments.
Hyperbolic Trigonometric Functions
-
::cosh: Returns the hyperbolic cosine of the given argument. -
::sinh: Returns the hyperbolic sine of the given argument. -
::tanh: Returns the hyperbolic tangent of the given argument.
Inverse Hyperbolic Trigonometric Functions
-
::acosh: Returns the inverse hyperbolic cosine of the given argument. -
::asinh: Returns the inverse hyperbolic sine of the given argument. -
::atanh: Returns the inverse hyperbolic tangent of the given argument.
Exponentiation and Logarithmic Functions
-
::exp: Returns the value of a given value raised to a given power. -
::log: Returns the logarithm of a given value in a given base. -
::log10: Returns the base 10 logarithm of the given argument. -
::log2: Returns the base 2 logarithm of the given argument.
Fraction and Exponent Functions
-
::frexp: Returns the fraction and exponent of the given argument. -
::ldexp: Returns the value for a given fraction and exponent.
Root Functions
-
::cbrt: Returns the cube root of the given argument. -
::sqrt: Returns the square root of the given argument.
Error Functions
-
::erf: Returns the value of the Gauss error function for the given argument. -
::erfc: Returns the value of the complementary error function for the given argument.
Gamma Functions
-
::gamma: Returns the value of the gamma function for the given argument. -
::lgamma: Returns the value of the logarithmic gamma function for the given argument.
Hypotenuse Function
-
::hypot: Returnssqrt(a<b>2 + b</b>2)for the givenaandb.
Constants
Public Class Methods
# File vendor/bundle/ruby/4.0.0/gems/rbs-4.0.3/core/math.rbs, line 167
def self.acos: (double x) -> Float
Returns the arc cosine of x.
-
Domain:
[-1, 1]. -
Range:
[0, PI].
Examples:
acos(-1.0) # => 3.141592653589793 # PI acos(0.0) # => 1.5707963267948966 # PI/2 acos(1.0) # => 0.0
# File vendor/bundle/ruby/4.0.0/gems/rbs-4.0.3/core/math.rbs, line 184
def self.acosh: (double x) -> Float
Returns the inverse hyperbolic cosine of x.
-
Domain:
[1, INFINITY]. -
Range:
[0, INFINITY].
Examples:
acosh(1.0) # => 0.0 acosh(INFINITY) # => Infinity
# File vendor/bundle/ruby/4.0.0/gems/rbs-4.0.3/core/math.rbs, line 202
def self.asin: (double x) -> Float
Returns the arc sine of x.
-
Domain:
[-1, -1]. -
Range:
[-PI/2, PI/2].
Examples:
asin(-1.0) # => -1.5707963267948966 # -PI/2 asin(0.0) # => 0.0 asin(1.0) # => 1.5707963267948966 # PI/2
# File vendor/bundle/ruby/4.0.0/gems/rbs-4.0.3/core/math.rbs, line 220
def self.asinh: (double x) -> Float
Returns the inverse hyperbolic sine of x.
-
Domain:
[-INFINITY, INFINITY]. -
Range:
[-INFINITY, INFINITY].
Examples:
asinh(-INFINITY) # => -Infinity asinh(0.0) # => 0.0 asinh(INFINITY) # => Infinity
# File vendor/bundle/ruby/4.0.0/gems/rbs-4.0.3/core/math.rbs, line 243
def self.atan: (double x) -> Float
Returns the arc tangent of x.
-
Domain:
[-INFINITY, INFINITY]. -
Range:
[-PI/2, PI/2].
Examples:
atan(-INFINITY) # => -1.5707963267948966 # -PI2 atan(-PI) # => -1.2626272556789115 atan(-PI/2) # => -1.0038848218538872 atan(0.0) # => 0.0 atan(PI/2) # => 1.0038848218538872 atan(PI) # => 1.2626272556789115 atan(INFINITY) # => 1.5707963267948966 # PI/2
# File vendor/bundle/ruby/4.0.0/gems/rbs-4.0.3/core/math.rbs, line 265
def self.atan2: (double y, double x) -> Float
Returns the arc tangent of y and x in [radians](en.wikipedia.org/wiki/Trigonometric_functions#Radians_versus _degrees).
-
Domain of
y:[-INFINITY, INFINITY]. -
Domain of
x:[-INFINITY, INFINITY]. -
Range:
[-PI, PI].
Examples:
atan2(-1.0, -1.0) # => -2.356194490192345 # -3*PI/4 atan2(-1.0, 0.0) # => -1.5707963267948966 # -PI/2 atan2(-1.0, 1.0) # => -0.7853981633974483 # -PI/4 atan2(0.0, -1.0) # => 3.141592653589793 # PI
# File vendor/bundle/ruby/4.0.0/gems/rbs-4.0.3/core/math.rbs, line 283
def self.atanh: (double x) -> Float
Returns the inverse hyperbolic tangent of x.
-
Domain:
[-1, 1]. -
Range:
[-INFINITY, INFINITY].
Examples:
atanh(-1.0) # => -Infinity atanh(0.0) # => 0.0 atanh(1.0) # => Infinity
# File vendor/bundle/ruby/4.0.0/gems/rbs-4.0.3/core/math.rbs, line 308
def self.cbrt: (double x) -> Float
Returns the cube root of x.
-
Domain:
[-INFINITY, INFINITY]. -
Range:
[-INFINITY, INFINITY].
Examples:
cbrt(-INFINITY) # => -Infinity cbrt(-27.0) # => -3.0 cbrt(-8.0) # => -2.0 cbrt(-2.0) # => -1.2599210498948732 cbrt(1.0) # => 1.0 cbrt(0.0) # => 0.0 cbrt(1.0) # => 1.0 cbrt(2.0) # => 1.2599210498948732 cbrt(8.0) # => 2.0 cbrt(27.0) # => 3.0 cbrt(INFINITY) # => Infinity
# File vendor/bundle/ruby/4.0.0/gems/rbs-4.0.3/core/math.rbs, line 329
def self.cos: (double x) -> Float
Returns the cosine of x in [radians](en.wikipedia.org/wiki/Trigonometric_functions#Radians_versus _degrees).
-
Domain:
(-INFINITY, INFINITY). -
Range:
[-1.0, 1.0].
Examples:
cos(-PI) # => -1.0 cos(-PI/2) # => 6.123031769111886e-17 # 0.0000000000000001 cos(0.0) # => 1.0 cos(PI/2) # => 6.123031769111886e-17 # 0.0000000000000001 cos(PI) # => -1.0
# File vendor/bundle/ruby/4.0.0/gems/rbs-4.0.3/core/math.rbs, line 349
def self.cosh: (double x) -> Float
Returns the hyperbolic cosine of x in [radians](en.wikipedia.org/wiki/Trigonometric_functions#Radians_versus _degrees).
-
Domain:
[-INFINITY, INFINITY]. -
Range:
[1, INFINITY].
Examples:
cosh(-INFINITY) # => Infinity cosh(0.0) # => 1.0 cosh(INFINITY) # => Infinity
# File vendor/bundle/ruby/4.0.0/gems/rbs-4.0.3/core/math.rbs, line 369
def self.erf: (double x) -> Float
Returns the value of the Gauss error function for x.
-
Domain:
[-INFINITY, INFINITY]. -
Range:
[-1, 1].
Examples:
erf(-INFINITY) # => -1.0 erf(0.0) # => 0.0 erf(INFINITY) # => 1.0
Related: Math.erfc.
# File vendor/bundle/ruby/4.0.0/gems/rbs-4.0.3/core/math.rbs, line 390
def self.erfc: (double x) -> Float
Returns the value of the [complementary error function](en.wikipedia.org/wiki/Error_function#Complementary_error_fun ction) for x.
-
Domain:
[-INFINITY, INFINITY]. -
Range:
[0, 2].
Examples:
erfc(-INFINITY) # => 2.0 erfc(0.0) # => 1.0 erfc(INFINITY) # => 0.0
Related: Math.erf.
# File vendor/bundle/ruby/4.0.0/gems/rbs-4.0.3/core/math.rbs, line 411
def self.exp: (double x) -> Float
Returns e raised to the x power.
-
Domain:
[-INFINITY, INFINITY]. -
Range:
[0, INFINITY].
Examples:
exp(-INFINITY) # => 0.0 exp(-1.0) # => 0.36787944117144233 # 1.0/E exp(0.0) # => 1.0 exp(0.5) # => 1.6487212707001282 # sqrt(E) exp(1.0) # => 2.718281828459045 # E exp(2.0) # => 7.38905609893065 # E**2 exp(INFINITY) # => Infinity
# File vendor/bundle/ruby/4.0.0/gems/rbs-4.0.3/core/math.rbs, line 432
def self.expm1: (double x) -> Float
Returns “exp(x) - 1”, e raised to the x power, minus 1.
-
Domain:
[-INFINITY, INFINITY]. -
Range:
[-1.0, INFINITY].
Examples:
expm1(-INFINITY) # => 0.0 expm1(-1.0) # => -0.6321205588285577 # 1.0/E - 1 expm1(0.0) # => 0.0 expm1(0.5) # => 0.6487212707001282 # sqrt(E) - 1 expm1(1.0) # => 1.718281828459045 # E - 1 expm1(2.0) # => 6.38905609893065 # E**2 - 1 expm1(INFINITY) # => Infinity
# File vendor/bundle/ruby/4.0.0/gems/rbs-4.0.3/core/math.rbs, line 462
def self.frexp: (double x) -> [Float, Integer]
Returns a 2-element array containing the normalized signed float fraction and integer exponent of x such that:
x = fraction * 2**exponent
See [IEEE 754 double-precision binary floating-point format: binary64](en.wikipedia.org/wiki/Double-precision_floating-point_format
#IEEE_754_double-precision_binary_floating-point_format:_binary64).
-
Domain:
[-INFINITY, INFINITY]. -
Range[-INFINITY, INFINITY].
Examples:
frexp(-INFINITY) # => [-Infinity, -1] frexp(-2.0) # => [-0.5, 2] frexp(-1.0) # => [-0.5, 1] frexp(0.0) # => [0.0, 0] frexp(1.0) # => [0.5, 1] frexp(2.0) # => [0.5, 2] frexp(INFINITY) # => [Infinity, -1]
Related: Math.ldexp (inverse of Math.frexp).
# File vendor/bundle/ruby/4.0.0/gems/rbs-4.0.3/core/math.rbs, line 488
def self.gamma: (double x) -> Float
Returns the value of the gamma function for x.
-
Domain:
(-INFINITY, INFINITY]excluding negative integers. -
Range:
[-INFINITY, INFINITY].
Examples:
gamma(-2.5) # => -0.9453087204829431 gamma(-1.5) # => 2.3632718012073513 gamma(-0.5) # => -3.5449077018110375 gamma(0.0) # => Infinity gamma(1.0) # => 1.0 gamma(2.0) # => 1.0 gamma(3.0) # => 2.0 gamma(4.0) # => 6.0 gamma(5.0) # => 24.0
Related: Math.lgamma.
# File vendor/bundle/ruby/4.0.0/gems/rbs-4.0.3/core/math.rbs, line 513
def self.hypot: (double x, double y) -> Float
Returns sqrt(a<b>2 + b</b>2), which is the length of the longest side c (the hypotenuse) of the right triangle whose other sides have lengths a and b.
-
Domain of
a:[-INFINITY, INFINITY]. -
Domain of +ab:
[-INFINITY, INFINITY]. -
Range:
[0, INFINITY].
Examples:
hypot(0.0, 1.0) # => 1.0 hypot(1.0, 1.0) # => 1.4142135623730951 # sqrt(2.0) hypot(3.0, 4.0) # => 5.0 hypot(5.0, 12.0) # => 13.0 hypot(1.0, sqrt(3.0)) # => 1.9999999999999998 # Near 2.0
Note that if either argument is INFINITY or -INFINITY, the result is Infinity.
# File vendor/bundle/ruby/4.0.0/gems/rbs-4.0.3/core/math.rbs, line 541
def self.ldexp: (double fraction, int exponent) -> Float
Returns the value of fraction * 2**exponent.
-
Domain of
fraction:[0.0, 1.0). -
Domain of
exponent:[0, 1024](larger values are equivalent to 1024).
See [IEEE 754 double-precision binary floating-point format: binary64](en.wikipedia.org/wiki/Double-precision_floating-point_format
#IEEE_754_double-precision_binary_floating-point_format:_binary64).
Examples:
ldexp(-INFINITY, -1) # => -Infinity ldexp(-0.5, 2) # => -2.0 ldexp(-0.5, 1) # => -1.0 ldexp(0.0, 0) # => 0.0 ldexp(-0.5, 1) # => 1.0 ldexp(-0.5, 2) # => 2.0 ldexp(INFINITY, -1) # => Infinity
Related: Math.frexp (inverse of Math.ldexp).
# File vendor/bundle/ruby/4.0.0/gems/rbs-4.0.3/core/math.rbs, line 580
def self.lgamma: (double x) -> [Float, -1 | 1]
Returns a 2-element array equivalent to:
[Math.log(Math.gamma(x).abs), Math.gamma(x) < 0 ? -1 : 1]
See log gamma function.
-
Domain:
(-INFINITY, INFINITY]. -
Rangeof first element:(-INFINITY, INFINITY]. -
Second element is -1 or 1.
Examples:
lgamma(-4.0) # => [Infinity, -1] lgamma(-3.0) # => [Infinity, -1] lgamma(-2.0) # => [Infinity, -1] lgamma(-1.0) # => [Infinity, -1] lgamma(0.0) # => [Infinity, 1] lgamma(1.0) # => [0.0, 1] lgamma(2.0) # => [0.0, 1] lgamma(3.0) # => [0.6931471805599436, 1] lgamma(4.0) # => [1.7917594692280545, 1] lgamma(-2.5) # => [-0.05624371649767279, -1] lgamma(-1.5) # => [0.8600470153764797, 1] lgamma(-0.5) # => [1.265512123484647, -1] lgamma(0.5) # => [0.5723649429247004, 1] lgamma(1.5) # => [-0.12078223763524676, 1] lgamma(2.5) # => [0.2846828704729205, 1]
Related: Math.gamma.
# File vendor/bundle/ruby/4.0.0/gems/rbs-4.0.3/core/math.rbs, line 607
def self.log: (double x, ?double base) -> Float
Returns the base base logarithm of x.
-
Domain:
[0, INFINITY]. -
Range:
[-INFINITY, INFINITY)].
Examples:
log(0.0) # => -Infinity log(1.0) # => 0.0 log(E) # => 1.0 log(INFINITY) # => Infinity log(0.0, 2.0) # => -Infinity log(1.0, 2.0) # => 0.0 log(2.0, 2.0) # => 1.0 log(0.0, 10.0) # => -Infinity log(1.0, 10.0) # => 0.0 log(10.0, 10.0) # => 1.0
# File vendor/bundle/ruby/4.0.0/gems/rbs-4.0.3/core/math.rbs, line 626
def self.log10: (double x) -> Float
Returns the base 10 logarithm of x.
-
Domain:
[0, INFINITY]. -
Range:
[-INFINITY, INFINITY].
Examples:
log10(0.0) # => -Infinity log10(1.0) # => 0.0 log10(10.0) # => 1.0 log10(INFINITY) # => Infinity
# File vendor/bundle/ruby/4.0.0/gems/rbs-4.0.3/core/math.rbs, line 645
def self.log1p: (double x) -> Float
# File vendor/bundle/ruby/4.0.0/gems/rbs-4.0.3/core/math.rbs, line 664
def self.log2: (double x) -> Float
Returns the base 2 logarithm of x.
-
Domain:
[0, INFINITY]. -
Range:
[-INFINITY, INFINITY].
Examples:
log2(0.0) # => -Infinity log2(1.0) # => 0.0 log2(2.0) # => 1.0 log2(INFINITY) # => Infinity
# File vendor/bundle/ruby/4.0.0/gems/rbs-4.0.3/core/math.rbs, line 685
def self.sin: (double x) -> Float
Returns the sine of x in [radians](en.wikipedia.org/wiki/Trigonometric_functions#Radians_versus _degrees).
-
Domain:
(-INFINITY, INFINITY). -
Range:
[-1.0, 1.0].
Examples:
sin(-PI) # => -1.2246063538223773e-16 # -0.0000000000000001 sin(-PI/2) # => -1.0 sin(0.0) # => 0.0 sin(PI/2) # => 1.0 sin(PI) # => 1.2246063538223773e-16 # 0.0000000000000001
# File vendor/bundle/ruby/4.0.0/gems/rbs-4.0.3/core/math.rbs, line 705
def self.sinh: (double x) -> Float
Returns the hyperbolic sine of x in [radians](en.wikipedia.org/wiki/Trigonometric_functions#Radians_versus _degrees).
-
Domain:
[-INFINITY, INFINITY]. -
Range:
[-INFINITY, INFINITY].
Examples:
sinh(-INFINITY) # => -Infinity sinh(0.0) # => 0.0 sinh(INFINITY) # => Infinity
# File vendor/bundle/ruby/4.0.0/gems/rbs-4.0.3/core/math.rbs, line 727
def self.sqrt: (double x) -> Float
Returns the principal (non-negative) square root of x.
-
Domain:
[0, INFINITY]. -
Range:
[0, INFINITY].
Examples:
sqrt(0.0) # => 0.0 sqrt(0.5) # => 0.7071067811865476 sqrt(1.0) # => 1.0 sqrt(2.0) # => 1.4142135623730951 sqrt(4.0) # => 2.0 sqrt(9.0) # => 3.0 sqrt(INFINITY) # => Infinity
# File vendor/bundle/ruby/4.0.0/gems/rbs-4.0.3/core/math.rbs, line 749
def self.tan: (double x) -> Float
Returns the tangent of x in [radians](en.wikipedia.org/wiki/Trigonometric_functions#Radians_versus _degrees).
-
Domain:
(-INFINITY, INFINITY). -
Range:
(-INFINITY, INFINITY).
Examples:
tan(-PI) # => 1.2246467991473532e-16 # -0.0000000000000001 tan(-PI/2) # => -1.633123935319537e+16 # -16331239353195370.0 tan(0.0) # => 0.0 tan(PI/2) # => 1.633123935319537e+16 # 16331239353195370.0 tan(PI) # => -1.2246467991473532e-16 # -0.0000000000000001
# File vendor/bundle/ruby/4.0.0/gems/rbs-4.0.3/core/math.rbs, line 769
def self.tanh: (double x) -> Float
Returns the hyperbolic tangent of x in [radians](en.wikipedia.org/wiki/Trigonometric_functions#Radians_versus _degrees).
-
Domain:
[-INFINITY, INFINITY]. -
Range:
[-1, 1].
Examples:
tanh(-INFINITY) # => -1.0 tanh(0.0) # => 0.0 tanh(INFINITY) # => 1.0