stdlib/math/functions.rb
tests/_examples/stdlib/math/functions.rb in the metorex repository.
# Math's functions are module functions, so both `Math.sqrt` and a private
# `sqrt` inside a class that includes Math reach the same one.
p Math.sqrt 4
p Math.cbrt 27
p Math.hypot 3, 4
p Math.log 1
p Math.log 8, 2
p Math.log2 8
p Math.log10 1000
p Math.exp 0
p Math.frexp 1234
p Math.ldexp 0.6025390625, 11
class Distance
include Math
def initialize(x, y)
@x = x
@y = y
end
def length
sqrt(@x * @x + @y * @y)
end
end
p Distance.new(3, 4).length
p Math.private_instance_methods.include? :sqrt
# A logarithm of a number too wide for a Float keeps the digits the Float
# cannot hold.
p Math.log2(2 ** 10001)
# An argument outside a function's domain, and one that is not a number at
# all, are each refused.
begin
Math.sqrt -1
rescue Math::DomainError => error
puts error.message
end
begin
Math.sqrt "four"
rescue TypeError => error
puts error.message
end
p Math.sqrt(0.0 / 0.0).nan?
Output:
2.0
3.0
5.0
0.0
3.0
3.0
3.0
1.0
[0.6025390625, 11]
1234.0
5.0
true
10001.0
Numerical argument is out of domain - "sqrt"
can't convert String into Float
true