core/math.rbs in rbs-3.0.0.dev.2 vs core/math.rbs in rbs-3.0.0.dev.3
- old
+ new
@@ -1,463 +1,735 @@
# <!-- rdoc-file=math.c -->
-# The Math module contains module functions for basic trigonometric and
-# transcendental functions. See class Float for a list of constants that define
-# Ruby's floating point accuracy.
+# Module Math provides methods for basic trigonometric, logarithmic, and
+# transcendental functions, and for extracting roots.
#
-# Domains and codomains are given only for real (not complex) numbers.
+# 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: Returns `sqrt(a**2 + b**2)` for the given `a` and `b`.
+#
module Math
# <!--
# rdoc-file=math.c
- # - Math.acos(x) -> Float
+ # - Math.acos(x) -> float
# -->
- # Computes the arc cosine of `x`. Returns 0..PI.
+ # Returns the [arc
+ # cosine](https://en.wikipedia.org/wiki/Inverse_trigonometric_functions) of `x`.
#
- # Domain: [-1, 1]
+ # * Domain: `[-1, 1]`.
+ # * Range: `[0, PI]`.
#
- # Codomain: [0, PI]
#
- # Math.acos(0) == Math::PI/2 #=> true
+ # Examples:
#
+ # acos(-1.0) # => 3.141592653589793 # PI
+ # acos(0.0) # => 1.5707963267948966 # PI/2
+ # acos(1.0) # => 0.0
+ #
def self.acos: (Numeric x) -> Float
# <!--
# rdoc-file=math.c
- # - Math.acosh(x) -> Float
+ # - Math.acosh(x) -> float
# -->
- # Computes the inverse hyperbolic cosine of `x`.
+ # Returns the [inverse hyperbolic
+ # cosine](https://en.wikipedia.org/wiki/Inverse_hyperbolic_functions) of `x`.
#
- # Domain: [1, INFINITY)
+ # * Domain: `[1, INFINITY]`.
+ # * Range: `[0, INFINITY]`.
#
- # Codomain: [0, INFINITY)
#
- # Math.acosh(1) #=> 0.0
+ # Examples:
#
+ # acosh(1.0) # => 0.0
+ # acosh(INFINITY) # => Infinity
+ #
def self.acosh: (Numeric x) -> Float
# <!--
# rdoc-file=math.c
- # - Math.asin(x) -> Float
+ # - Math.asin(x) -> float
# -->
- # Computes the arc sine of `x`. Returns -PI/2..PI/2.
+ # Returns the [arc
+ # sine](https://en.wikipedia.org/wiki/Inverse_trigonometric_functions) of `x`.
#
- # Domain: [-1, -1]
+ # * Domain: `[-1, -1]`.
+ # * Range: `[-PI/2, PI/2]`.
#
- # Codomain: [-PI/2, PI/2]
#
- # Math.asin(1) == Math::PI/2 #=> true
+ # Examples:
#
+ # asin(-1.0) # => -1.5707963267948966 # -PI/2
+ # asin(0.0) # => 0.0
+ # asin(1.0) # => 1.5707963267948966 # PI/2
+ #
def self.asin: (Numeric x) -> Float
# <!--
# rdoc-file=math.c
- # - Math.asinh(x) -> Float
+ # - Math.asinh(x) -> float
# -->
- # Computes the inverse hyperbolic sine of `x`.
+ # Returns the [inverse hyperbolic
+ # sine](https://en.wikipedia.org/wiki/Inverse_hyperbolic_functions) of `x`.
#
- # Domain: (-INFINITY, INFINITY)
+ # * Domain: `[-INFINITY, INFINITY]`.
+ # * Range: `[-INFINITY, INFINITY]`.
#
- # Codomain: (-INFINITY, INFINITY)
#
- # Math.asinh(1) #=> 0.881373587019543
+ # Examples:
#
+ # asinh(-INFINITY) # => -Infinity
+ # asinh(0.0) # => 0.0
+ # asinh(INFINITY) # => Infinity
+ #
def self.asinh: (Numeric x) -> Float
# <!--
# rdoc-file=math.c
# - Math.atan(x) -> Float
# -->
- # Computes the arc tangent of `x`. Returns -PI/2..PI/2.
+ # Returns the [arc
+ # tangent](https://en.wikipedia.org/wiki/Inverse_trigonometric_functions) of
+ # `x`.
#
- # Domain: (-INFINITY, INFINITY)
+ # * Domain: `[-INFINITY, INFINITY]`.
+ # * Range: `[-PI/2, PI/2] `.
#
- # Codomain: (-PI/2, PI/2)
#
- # Math.atan(0) #=> 0.0
+ # 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
+ #
def self.atan: (Numeric x) -> Float
# <!--
# rdoc-file=math.c
- # - Math.atan2(y, x) -> Float
+ # - Math.atan2(y, x) -> float
# -->
- # Computes the arc tangent given `y` and `x`. Returns a Float in the range
- # -PI..PI. Return value is a angle in radians between the positive x-axis of
- # cartesian plane and the point given by the coordinates (`x`, `y`) on it.
+ # Returns the [arc tangent](https://en.wikipedia.org/wiki/Atan2) of `y` and `x`
+ # in
+ # [radians](https://en.wikipedia.org/wiki/Trigonometric_functions#Radians_versus
+ # _degrees).
#
- # Domain: (-INFINITY, INFINITY)
+ # * Domain of `y`: `[-INFINITY, INFINITY]`.
+ # * Domain of `x`: `[-INFINITY, INFINITY]`.
+ # * Range: `[-PI, PI]`.
#
- # Codomain: [-PI, PI]
#
- # Math.atan2(-0.0, -1.0) #=> -3.141592653589793
- # Math.atan2(-1.0, -1.0) #=> -2.356194490192345
- # Math.atan2(-1.0, 0.0) #=> -1.5707963267948966
- # Math.atan2(-1.0, 1.0) #=> -0.7853981633974483
- # Math.atan2(-0.0, 1.0) #=> -0.0
- # Math.atan2(0.0, 1.0) #=> 0.0
- # Math.atan2(1.0, 1.0) #=> 0.7853981633974483
- # Math.atan2(1.0, 0.0) #=> 1.5707963267948966
- # Math.atan2(1.0, -1.0) #=> 2.356194490192345
- # Math.atan2(0.0, -1.0) #=> 3.141592653589793
- # Math.atan2(INFINITY, INFINITY) #=> 0.7853981633974483
- # Math.atan2(INFINITY, -INFINITY) #=> 2.356194490192345
- # Math.atan2(-INFINITY, INFINITY) #=> -0.7853981633974483
- # Math.atan2(-INFINITY, -INFINITY) #=> -2.356194490192345
+ # 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
+ #
def self.atan2: (Numeric y, Numeric x) -> Float
# <!--
# rdoc-file=math.c
- # - Math.atanh(x) -> Float
+ # - Math.atanh(x) -> float
# -->
- # Computes the inverse hyperbolic tangent of `x`.
+ # Returns the [inverse hyperbolic
+ # tangent](https://en.wikipedia.org/wiki/Inverse_hyperbolic_functions) of `x`.
#
- # Domain: (-1, 1)
+ # * Domain: `[-1, 1]`.
+ # * Range: `[-INFINITY, INFINITY]`.
#
- # Codomain: (-INFINITY, INFINITY)
#
- # Math.atanh(1) #=> Infinity
+ # Examples:
#
+ # atanh(-1.0) # => -Infinity
+ # atanh(0.0) # => 0.0
+ # atanh(1.0) # => Infinity
+ #
def self.atanh: (Numeric x) -> Float
# <!--
# rdoc-file=math.c
- # - Math.cbrt(x) -> Float
+ # - Math.cbrt(x) -> float
# -->
- # Returns the cube root of `x`.
+ # Returns the [cube root](https://en.wikipedia.org/wiki/Cube_root) of `x`.
#
- # Domain: (-INFINITY, INFINITY)
+ # * Domain: `[-INFINITY, INFINITY]`.
+ # * Range: `[-INFINITY, INFINITY]`.
#
- # Codomain: (-INFINITY, INFINITY)
#
- # -9.upto(9) {|x|
- # p [x, Math.cbrt(x), Math.cbrt(x)**3]
- # }
- # #=> [-9, -2.0800838230519, -9.0]
- # # [-8, -2.0, -8.0]
- # # [-7, -1.91293118277239, -7.0]
- # # [-6, -1.81712059283214, -6.0]
- # # [-5, -1.7099759466767, -5.0]
- # # [-4, -1.5874010519682, -4.0]
- # # [-3, -1.44224957030741, -3.0]
- # # [-2, -1.25992104989487, -2.0]
- # # [-1, -1.0, -1.0]
- # # [0, 0.0, 0.0]
- # # [1, 1.0, 1.0]
- # # [2, 1.25992104989487, 2.0]
- # # [3, 1.44224957030741, 3.0]
- # # [4, 1.5874010519682, 4.0]
- # # [5, 1.7099759466767, 5.0]
- # # [6, 1.81712059283214, 6.0]
- # # [7, 1.91293118277239, 7.0]
- # # [8, 2.0, 8.0]
- # # [9, 2.0800838230519, 9.0]
+ # 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
+ #
def self.cbrt: (Numeric x) -> Float
# <!--
# rdoc-file=math.c
- # - Math.cos(x) -> Float
+ # - Math.cos(x) -> float
# -->
- # Computes the cosine of `x` (expressed in radians). Returns a Float in the
- # range -1.0..1.0.
+ # Returns the [cosine](https://en.wikipedia.org/wiki/Sine_and_cosine) of `x` in
+ # [radians](https://en.wikipedia.org/wiki/Trigonometric_functions#Radians_versus
+ # _degrees).
#
- # Domain: (-INFINITY, INFINITY)
+ # * Domain: `(-INFINITY, INFINITY)`.
+ # * Range: `[-1.0, 1.0]`.
#
- # Codomain: [-1, 1]
#
- # Math.cos(Math::PI) #=> -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
+ #
def self.cos: (Numeric x) -> Float
# <!--
# rdoc-file=math.c
- # - Math.cosh(x) -> Float
+ # - Math.cosh(x) -> float
# -->
- # Computes the hyperbolic cosine of `x` (expressed in radians).
+ # Returns the [hyperbolic
+ # cosine](https://en.wikipedia.org/wiki/Hyperbolic_functions) of `x` in
+ # [radians](https://en.wikipedia.org/wiki/Trigonometric_functions#Radians_versus
+ # _degrees).
#
- # Domain: (-INFINITY, INFINITY)
+ # * Domain: `[-INFINITY, INFINITY]`.
+ # * Range: `[1, INFINITY]`.
#
- # Codomain: [1, INFINITY)
#
- # Math.cosh(0) #=> 1.0
+ # Examples:
#
+ # cosh(-INFINITY) # => Infinity
+ # cosh(0.0) # => 1.0
+ # cosh(INFINITY) # => Infinity
+ #
def self.cosh: (Numeric x) -> Float
# <!--
# rdoc-file=math.c
- # - Math.erf(x) -> Float
+ # - Math.erf(x) -> float
# -->
- # Calculates the error function of `x`.
+ # Returns the value of the [Gauss error
+ # function](https://en.wikipedia.org/wiki/Error_function) for `x`.
#
- # Domain: (-INFINITY, INFINITY)
+ # * Domain: `[-INFINITY, INFINITY]`.
+ # * Range: `[-1, 1]`.
#
- # Codomain: (-1, 1)
#
- # Math.erf(0) #=> 0.0
+ # Examples:
#
+ # erf(-INFINITY) # => -1.0
+ # erf(0.0) # => 0.0
+ # erf(INFINITY) # => 1.0
+ #
+ # Related: Math.erfc.
+ #
def self.erf: (Numeric x) -> Float
# <!--
# rdoc-file=math.c
# - Math.erfc(x) -> Float
# -->
- # Calculates the complementary error function of x.
+ # Returns the value of the [complementary error
+ # function](https://en.wikipedia.org/wiki/Error_function#Complementary_error_fun
+ # ction) for `x`.
#
- # Domain: (-INFINITY, INFINITY)
+ # * Domain: `[-INFINITY, INFINITY]`.
+ # * Range: `[0, 2]`.
#
- # Codomain: (0, 2)
#
- # Math.erfc(0) #=> 1.0
+ # Examples:
#
+ # erfc(-INFINITY) # => 2.0
+ # erfc(0.0) # => 1.0
+ # erfc(INFINITY) # => 0.0
+ #
+ # Related: Math.erf.
+ #
def self.erfc: (Numeric x) -> Float
# <!--
# rdoc-file=math.c
- # - Math.exp(x) -> Float
+ # - Math.exp(x) -> float
# -->
- # Returns e**x.
+ # Returns `e` raised to the `x` power.
#
- # Domain: (-INFINITY, INFINITY)
+ # * Domain: `[-INFINITY, INFINITY]`.
+ # * Range: `[0, INFINITY]`.
#
- # Codomain: (0, INFINITY)
#
- # Math.exp(0) #=> 1.0
- # Math.exp(1) #=> 2.718281828459045
- # Math.exp(1.5) #=> 4.4816890703380645
+ # 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
+ #
def self.exp: (Numeric x) -> Float
# <!--
# rdoc-file=math.c
- # - Math.frexp(x) -> [fraction, exponent]
+ # - Math.frexp(x) -> [fraction, exponent]
# -->
- # Returns a two-element array containing the normalized fraction (a Float) and
- # exponent (an Integer) of `x`.
+ # Returns a 2-element array containing the normalized signed float `fraction`
+ # and integer `exponent` of `x` such that:
#
- # fraction, exponent = Math.frexp(1234) #=> [0.6025390625, 11]
- # fraction * 2**exponent #=> 1234.0
+ # x = fraction * 2**exponent
#
+ # See [IEEE 754 double-precision binary floating-point format:
+ # binary64](https://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).
+ #
def self.frexp: (Numeric x) -> [ Float, Integer ]
# <!--
# rdoc-file=math.c
- # - Math.gamma(x) -> Float
+ # - Math.gamma(x) -> float
# -->
- # Calculates the gamma function of x.
+ # Returns the value of the [gamma
+ # function](https://en.wikipedia.org/wiki/Gamma_function) for `x`.
#
- # Note that gamma(n) is the same as fact(n-1) for integer n > 0. However
- # gamma(n) returns float and can be an approximation.
+ # * Domain: `(-INFINITY, INFINITY]` excluding negative integers.
+ # * Range: `[-INFINITY, INFINITY]`.
#
- # def fact(n) (1..n).inject(1) {|r,i| r*i } end
- # 1.upto(26) {|i| p [i, Math.gamma(i), fact(i-1)] }
- # #=> [1, 1.0, 1]
- # # [2, 1.0, 1]
- # # [3, 2.0, 2]
- # # [4, 6.0, 6]
- # # [5, 24.0, 24]
- # # [6, 120.0, 120]
- # # [7, 720.0, 720]
- # # [8, 5040.0, 5040]
- # # [9, 40320.0, 40320]
- # # [10, 362880.0, 362880]
- # # [11, 3628800.0, 3628800]
- # # [12, 39916800.0, 39916800]
- # # [13, 479001600.0, 479001600]
- # # [14, 6227020800.0, 6227020800]
- # # [15, 87178291200.0, 87178291200]
- # # [16, 1307674368000.0, 1307674368000]
- # # [17, 20922789888000.0, 20922789888000]
- # # [18, 355687428096000.0, 355687428096000]
- # # [19, 6.402373705728e+15, 6402373705728000]
- # # [20, 1.21645100408832e+17, 121645100408832000]
- # # [21, 2.43290200817664e+18, 2432902008176640000]
- # # [22, 5.109094217170944e+19, 51090942171709440000]
- # # [23, 1.1240007277776077e+21, 1124000727777607680000]
- # # [24, 2.5852016738885062e+22, 25852016738884976640000]
- # # [25, 6.204484017332391e+23, 620448401733239439360000]
- # # [26, 1.5511210043330954e+25, 15511210043330985984000000]
#
+ # 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.
+ #
def self.gamma: (Numeric x) -> Float
# <!--
# rdoc-file=math.c
- # - Math.hypot(x, y) -> Float
+ # - Math.hypot(a, b) -> float
# -->
- # Returns sqrt(x**2 + y**2), the hypotenuse of a right-angled triangle with
- # sides `x` and `y`.
+ # Returns `sqrt(a**2 + 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`.
#
- # Math.hypot(3, 4) #=> 5.0
+ # * 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`.
+ #
def self.hypot: (Numeric x, Numeric y) -> Float
# <!--
# rdoc-file=math.c
# - Math.ldexp(fraction, exponent) -> float
# -->
- # Returns the value of `fraction`*(2**`exponent`).
+ # Returns the value of `fraction * 2**exponent`.
#
- # fraction, exponent = Math.frexp(1234)
- # Math.ldexp(fraction, exponent) #=> 1234.0
+ # * 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](https://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).
+ #
def self.ldexp: (Numeric fraction, Numeric exponent) -> Float
# <!--
# rdoc-file=math.c
- # - Math.lgamma(x) -> [float, -1 or 1]
+ # - Math.lgamma(x) -> [float, -1 or 1]
# -->
- # Calculates the logarithmic gamma of `x` and the sign of gamma of `x`.
+ # Returns a 2-element array equivalent to:
#
- # Math.lgamma(x) is the same as
# [Math.log(Math.gamma(x).abs), Math.gamma(x) < 0 ? -1 : 1]
#
- # but avoids overflow by Math.gamma(x) for large x.
+ # See [logarithmic gamma
+ # function](https://en.wikipedia.org/wiki/Gamma_function#The_log-gamma_function)
+ # .
#
- # Math.lgamma(0) #=> [Infinity, 1]
+ # * Domain: `(-INFINITY, INFINITY]`.
+ # * Range of 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.
+ #
def self.lgamma: (Numeric x) -> [ Float, Integer ]
# <!--
# rdoc-file=math.c
- # - Math.log(x) -> Float
- # - Math.log(x, base) -> Float
+ # - Math.log(x, base = Math::E) -> Float
# -->
- # Returns the logarithm of `x`. If additional second argument is given, it will
- # be the base of logarithm. Otherwise it is `e` (for the natural logarithm).
+ # Returns the base `base` [logarithm](https://en.wikipedia.org/wiki/Logarithm)
+ # of `x`.
#
- # Domain: (0, INFINITY)
+ # * Domain: `[0, INFINITY]`.
+ # * Range: `[-INFINITY, INFINITY)]`.
#
- # Codomain: (-INFINITY, INFINITY)
#
- # Math.log(0) #=> -Infinity
- # Math.log(1) #=> 0.0
- # Math.log(Math::E) #=> 1.0
- # Math.log(Math::E**3) #=> 3.0
- # Math.log(12, 3) #=> 2.2618595071429146
+ # 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
+ #
def self.log: (Numeric x, ?Numeric base) -> Float
# <!--
# rdoc-file=math.c
- # - Math.log10(x) -> Float
+ # - Math.log10(x) -> float
# -->
- # Returns the base 10 logarithm of `x`.
+ # Returns the base 10 [logarithm](https://en.wikipedia.org/wiki/Logarithm) of
+ # `x`.
#
- # Domain: (0, INFINITY)
+ # * Domain: `[0, INFINITY]`.
+ # * Range: `[-INFINITY, INFINITY]`.
#
- # Codomain: (-INFINITY, INFINITY)
#
- # Math.log10(1) #=> 0.0
- # Math.log10(10) #=> 1.0
- # Math.log10(10**100) #=> 100.0
+ # Examples:
#
+ # log10(0.0) # => -Infinity
+ # log10(1.0) # => 0.0
+ # log10(10.0) # => 1.0
+ # log10(INFINITY) # => Infinity
+ #
def self.log10: (Numeric x) -> Float
# <!--
# rdoc-file=math.c
- # - Math.log2(x) -> Float
+ # - Math.log2(x) -> float
# -->
- # Returns the base 2 logarithm of `x`.
+ # Returns the base 2 [logarithm](https://en.wikipedia.org/wiki/Logarithm) of
+ # `x`.
#
- # Domain: (0, INFINITY)
+ # * Domain: `[0, INFINITY]`.
+ # * Range: `[-INFINITY, INFINITY]`.
#
- # Codomain: (-INFINITY, INFINITY)
#
- # Math.log2(1) #=> 0.0
- # Math.log2(2) #=> 1.0
- # Math.log2(32768) #=> 15.0
- # Math.log2(65536) #=> 16.0
+ # Examples:
#
+ # log2(0.0) # => -Infinity
+ # log2(1.0) # => 0.0
+ # log2(2.0) # => 1.0
+ # log2(INFINITY) # => Infinity
+ #
def self.log2: (Numeric x) -> Float
# <!--
# rdoc-file=math.c
- # - Math.sin(x) -> Float
+ # - Math.sin(x) -> float
# -->
- # Computes the sine of `x` (expressed in radians). Returns a Float in the range
- # -1.0..1.0.
+ # Returns the [sine](https://en.wikipedia.org/wiki/Sine_and_cosine) of `x` in
+ # [radians](https://en.wikipedia.org/wiki/Trigonometric_functions#Radians_versus
+ # _degrees).
#
- # Domain: (-INFINITY, INFINITY)
+ # * Domain: `(-INFINITY, INFINITY)`.
+ # * Range: `[-1.0, 1.0]`.
#
- # Codomain: [-1, 1]
#
- # Math.sin(Math::PI/2) #=> 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
+ #
def self.sin: (Numeric x) -> Float
# <!--
# rdoc-file=math.c
- # - Math.sinh(x) -> Float
+ # - Math.sinh(x) -> float
# -->
- # Computes the hyperbolic sine of `x` (expressed in radians).
+ # Returns the [hyperbolic
+ # sine](https://en.wikipedia.org/wiki/Hyperbolic_functions) of `x` in
+ # [radians](https://en.wikipedia.org/wiki/Trigonometric_functions#Radians_versus
+ # _degrees).
#
- # Domain: (-INFINITY, INFINITY)
+ # * Domain: `[-INFINITY, INFINITY]`.
+ # * Range: `[-INFINITY, INFINITY]`.
#
- # Codomain: (-INFINITY, INFINITY)
#
- # Math.sinh(0) #=> 0.0
+ # Examples:
#
+ # sinh(-INFINITY) # => -Infinity
+ # sinh(0.0) # => 0.0
+ # sinh(INFINITY) # => Infinity
+ #
def self.sinh: (Numeric x) -> Float
# <!--
# rdoc-file=math.c
- # - Math.sqrt(x) -> Float
+ # - Math.sqrt(x) -> float
# -->
- # Returns the non-negative square root of `x`.
+ # Returns the principal (non-negative) [square
+ # root](https://en.wikipedia.org/wiki/Square_root) of `x`.
#
- # Domain: [0, INFINITY)
+ # * Domain: `[0, INFINITY]`.
+ # * Range: `[0, INFINITY]`.
#
- # Codomain:[0, INFINITY)
#
- # 0.upto(10) {|x|
- # p [x, Math.sqrt(x), Math.sqrt(x)**2]
- # }
- # #=> [0, 0.0, 0.0]
- # # [1, 1.0, 1.0]
- # # [2, 1.4142135623731, 2.0]
- # # [3, 1.73205080756888, 3.0]
- # # [4, 2.0, 4.0]
- # # [5, 2.23606797749979, 5.0]
- # # [6, 2.44948974278318, 6.0]
- # # [7, 2.64575131106459, 7.0]
- # # [8, 2.82842712474619, 8.0]
- # # [9, 3.0, 9.0]
- # # [10, 3.16227766016838, 10.0]
+ # Examples:
#
- # Note that the limited precision of floating point arithmetic might lead to
- # surprising results:
+ # 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
#
- # Math.sqrt(10**46).to_i #=> 99999999999999991611392 (!)
- #
- # See also BigDecimal#sqrt and Integer.sqrt.
- #
def self.sqrt: (Numeric x) -> Float
# <!--
# rdoc-file=math.c
- # - Math.tan(x) -> Float
+ # - Math.tan(x) -> float
# -->
- # Computes the tangent of `x` (expressed in radians).
+ # Returns the [tangent](https://en.wikipedia.org/wiki/Trigonometric_functions)
+ # of `x` in
+ # [radians](https://en.wikipedia.org/wiki/Trigonometric_functions#Radians_versus
+ # _degrees).
#
- # Domain: (-INFINITY, INFINITY)
+ # * Domain: `(-INFINITY, INFINITY)`.
+ # * Range: `(-INFINITY, INFINITY)`.
#
- # Codomain: (-INFINITY, INFINITY)
#
- # Math.tan(0) #=> 0.0
+ # 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
+ #
def self.tan: (Numeric x) -> Float
# <!--
# rdoc-file=math.c
- # - Math.tanh(x) -> Float
+ # - Math.tanh(x) -> float
# -->
- # Computes the hyperbolic tangent of `x` (expressed in radians).
+ # Returns the [hyperbolic
+ # tangent](https://en.wikipedia.org/wiki/Hyperbolic_functions) of `x` in
+ # [radians](https://en.wikipedia.org/wiki/Trigonometric_functions#Radians_versus
+ # _degrees).
#
- # Domain: (-INFINITY, INFINITY)
+ # * Domain: `[-INFINITY, INFINITY]`.
+ # * Range: `[-1, 1]`.
#
- # Codomain: (-1, 1)
#
- # Math.tanh(0) #=> 0.0
+ # Examples:
+ #
+ # tanh(-INFINITY) # => -1.0
+ # tanh(0.0) # => 0.0
+ # tanh(INFINITY) # => 1.0
#
def self.tanh: (Numeric x) -> Float
end
# <!-- rdoc-file=math.c -->