# A \Float object stores a real number # using the native architecture's double-precision floating-point representation. # # == \Float Imprecisions # # Some real numbers can be represented precisely as \Float objects: # # 37.5 # => 37.5 # 98.75 # => 98.75 # 12.3125 # => 12.3125 # # Others cannot; among these are the transcendental numbers, including: # # - Pi, π: in mathematics, a number of infinite precision: # 3.1415926535897932384626433... (to 25 places); # in Ruby, it is of limited precision (in this case, to 16 decimal places): # # Math::PI # => 3.141592653589793 # # - Euler's number, e: in mathematics, a number of infinite precision: # 2.7182818284590452353602874... (to 25 places); # in Ruby, it is of limited precision (in this case, to 15 decimal places): # # Math::E # => 2.718281828459045 # # Some floating-point computations in Ruby give precise results: # # 1.0/2 # => 0.5 # 100.0/8 # => 12.5 # # Others do not: # # - In mathematics, 2/3 as a decimal number is an infinitely-repeating decimal: # 0.666... (forever); # in Ruby, +2.0/3+ is of limited precision (in this case, to 16 decimal places): # # 2.0/3 # => 0.6666666666666666 # # - In mathematics, the square root of 2 is an irrational number of infinite precision: # 1.4142135623730950488016887... (to 25 decimal places); # in Ruby, it is of limited precision (in this case, to 16 decimal places): # # Math.sqrt(2.0) # => 1.4142135623730951 # # - Even a simple computation can introduce imprecision: # # x = 0.1 + 0.2 # => 0.30000000000000004 # y = 0.3 # => 0.3 # x == y # => false # # See: # # - https://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html # - https://github.com/rdp/ruby_tutorials_core/wiki/Ruby-Talk-FAQ#-why-are-rubys-floats-imprecise # - https://en.wikipedia.org/wiki/Floating_point#Accuracy_problems # # Note that precise storage and computation of rational numbers # is possible using Rational objects. # # == Creating a \Float # # You can create a \Float object explicitly with: # # - A {floating-point literal}[rdoc-ref:syntax/literals.rdoc@Float+Literals]. # # You can convert certain objects to Floats with: # # - Method #Float. # # == What's Here # # First, what's elsewhere. Class \Float: # # - Inherits from # {class Numeric}[rdoc-ref:Numeric@What-27s+Here] # and {class Object}[rdoc-ref:Object@What-27s+Here]. # - Includes {module Comparable}[rdoc-ref:Comparable@What-27s+Here]. # # Here, class \Float provides methods for: # # - {Querying}[rdoc-ref:Float@Querying] # - {Comparing}[rdoc-ref:Float@Comparing] # - {Converting}[rdoc-ref:Float@Converting] # # === Querying # # - #finite?: Returns whether +self+ is finite. # - #hash: Returns the integer hash code for +self+. # - #infinite?: Returns whether +self+ is infinite. # - #nan?: Returns whether +self+ is a NaN (not-a-number). # # === Comparing # # - #<: Returns whether +self+ is less than the given value. # - #<=: Returns whether +self+ is less than or equal to the given value. # - #<=>: Returns a number indicating whether +self+ is less than, equal # to, or greater than the given value. # - #== (aliased as #=== and #eql?): Returns whether +self+ is equal to # the given value. # - #>: Returns whether +self+ is greater than the given value. # - #>=: Returns whether +self+ is greater than or equal to the given value. # # === Converting # # - #% (aliased as #modulo): Returns +self+ modulo the given value. # - #*: Returns the product of +self+ and the given value. # - #**: Returns the value of +self+ raised to the power of the given value. # - #+: Returns the sum of +self+ and the given value. # - #-: Returns the difference of +self+ and the given value. # - #/: Returns the quotient of +self+ and the given value. # - #ceil: Returns the smallest number greater than or equal to +self+. # - #coerce: Returns a 2-element array containing the given value converted to a \Float # and +self+ # - #divmod: Returns a 2-element array containing the quotient and remainder # results of dividing +self+ by the given value. # - #fdiv: Returns the \Float result of dividing +self+ by the given value. # - #floor: Returns the greatest number smaller than or equal to +self+. # - #next_float: Returns the next-larger representable \Float. # - #prev_float: Returns the next-smaller representable \Float. # - #quo: Returns the quotient from dividing +self+ by the given value. # - #round: Returns +self+ rounded to the nearest value, to a given precision. # - #to_i (aliased as #to_int): Returns +self+ truncated to an Integer. # - #to_s (aliased as #inspect): Returns a string containing the place-value # representation of +self+ in the given radix. # - #truncate: Returns +self+ truncated to a given precision. # class Float; end