struct Float64

big/number.cr
float.cr
primitives.cr

Constant Summary

DIGITS = `15`

The number of decimal digits that can be represented without losing precision

EPSILON = `2.2204460492503131e-16`

The machine epsilon (difference between 1.0 and the next representable value)

INFINITY = `(1_f64 / 0_f64).as(Float64)`
MANT_DIGITS = `53`

The number of digits that can be represented without losing precision (in base RADIX)

MAX = `1.7976931348623157e+308`

Largest finite value

MAX_10_EXP = `308`

The maximum possible power of 10 exponent (such that 10**MAX_10_EXP is representable)

MAX_EXP = `1024`

The maximum possible normal power of 2 exponent

MIN = `-1.7976931348623157e+308`

Smallest finite value

MIN_10_EXP = `-307`

The minimum possible power of 10 exponent (such that 10**MIN_10_EXP is representable)

MIN_EXP = `-1021`

The minimum possible normal power of 2 exponent

MIN_POSITIVE = `2.2250738585072014e-308`

Smallest normal positive value, whose previous representable value is subnormal

MIN_SUBNORMAL = `5.0e-324`

Smallest representable positive value, whose previous representable value is zero

NAN = `(0_f64 / 0_f64).as(Float64)`
RADIX = `2`

The radix or integer base used by the internal representation

Constructor Detail

def self.new(value : String, whitespace : Bool = true, strict : Bool = true) : self #

Returns a `Float64` by invoking `String#to_f64` on value.

``````Float64.new "20"                        # => 20.0
Float64.new "  20  ", whitespace: false # raises ArgumentError: Invalid Float64: "  20  "``````

def self.new(ctx : YAML::ParseContext, node : YAML::Nodes::Node) #

def self.new(pull : JSON::PullParser) #

def self.new(value) #

Returns a `Float64` by invoking `#to_f64` on value.

def self.new!(value) : Float64 #

Returns a `Float64` by invoking `#to_f64!` on value.

def self.parse_hexfloat(str : String) : self #

Returns a `Float32` by parsing str as a hexadecimal-significand string.

The string format is defined in section 5.12.3 of IEEE 754-2008, and is the same as the `%a` specifier for `sprintf`. Unlike e.g. `String#to_f`, whitespace and underscores are not allowed. Non-finite values are also recognized.

Raises `ArgumentError` if str is not a valid hexadecimal-significand string.

``````Float64.parse_hexfloat("0x123.456p7")             # => 37282.6875
Float64.parse_hexfloat("0x1.fffffffffffffp+1023") # => Float64::MAX
Float64.parse_hexfloat("-inf")                    # => -Float64::INFINITY
Float64.parse_hexfloat("0x1")                     # Invalid hexfloat: expected 'p' or 'P' (ArgumentError)
Float64.parse_hexfloat("a.bp+3")                  # Invalid hexfloat: expected '0' (ArgumentError)``````

Class Method Detail

def self.from_json_object_key?(key : String) : Float64 | Nil #

def self.parse_hexfloat?(str : String) : self | Nil #

Returns a `Float32` by parsing str as a hexadecimal-significand string, or `nil` if parsing fails.

The string format is defined in section 5.12.3 of IEEE 754-2008, and is the same as the `%a` specifier for `sprintf`. Unlike e.g. `String#to_f`, whitespace and underscores are not allowed. Non-finite values are also recognized.

``````Float64.parse_hexfloat?("0x123.456p7")     # => 37282.6875
Float64.parse_hexfloat?("0x1.fffffep+127") # => Float64::MAX
Float64.parse_hexfloat?("-inf")            # => -Float64::INFINITY
Float64.parse_hexfloat?("0x1")             # => nil
Float64.parse_hexfloat?("a.bp+3")          # => nil``````

Instance Method Detail

def !=(other : Int8) : Bool #

Returns `true` if `self` is not equal to other or if `self` and other are unordered.

def !=(other : Int16) : Bool #

Returns `true` if `self` is not equal to other or if `self` and other are unordered.

def !=(other : Int32) : Bool #

Returns `true` if `self` is not equal to other or if `self` and other are unordered.

def !=(other : Int64) : Bool #

Returns `true` if `self` is not equal to other or if `self` and other are unordered.

def !=(other : Int128) : Bool #

Returns `true` if `self` is not equal to other or if `self` and other are unordered.

def !=(other : UInt8) : Bool #

Returns `true` if `self` is not equal to other or if `self` and other are unordered.

def !=(other : UInt16) : Bool #

Returns `true` if `self` is not equal to other or if `self` and other are unordered.

def !=(other : UInt32) : Bool #

Returns `true` if `self` is not equal to other or if `self` and other are unordered.

def !=(other : UInt64) : Bool #

Returns `true` if `self` is not equal to other or if `self` and other are unordered.

def !=(other : UInt128) : Bool #

Returns `true` if `self` is not equal to other or if `self` and other are unordered.

def !=(other : Float32) : Bool #

Returns `true` if `self` is not equal to other or if `self` and other are unordered.

def !=(other : Float64) : Bool #

Returns `true` if `self` is not equal to other or if `self` and other are unordered.

def *(other : Int8) : self #

Returns the result of multiplying `self` and other.

def *(other : Int16) : self #

Returns the result of multiplying `self` and other.

def *(other : Int32) : self #

Returns the result of multiplying `self` and other.

def *(other : Int64) : self #

Returns the result of multiplying `self` and other.

def *(other : Int128) : self #

Returns the result of multiplying `self` and other.

def *(other : UInt8) : self #

Returns the result of multiplying `self` and other.

def *(other : UInt16) : self #

Returns the result of multiplying `self` and other.

def *(other : UInt32) : self #

Returns the result of multiplying `self` and other.

def *(other : UInt64) : self #

Returns the result of multiplying `self` and other.

def *(other : UInt128) : self #

Returns the result of multiplying `self` and other.

def *(other : Float32) : self #

Returns the result of multiplying `self` and other.

def *(other : Float64) : self #

Returns the result of multiplying `self` and other.

def **(other : Int32) #

def **(other : Float64) : Float64 #

def **(other) : Float64 #

def +(other : Int8) : self #

Returns the result of adding `self` and other.

def +(other : Int16) : self #

Returns the result of adding `self` and other.

def +(other : Int32) : self #

Returns the result of adding `self` and other.

def +(other : Int64) : self #

Returns the result of adding `self` and other.

def +(other : Int128) : self #

Returns the result of adding `self` and other.

def +(other : UInt8) : self #

Returns the result of adding `self` and other.

def +(other : UInt16) : self #

Returns the result of adding `self` and other.

def +(other : UInt32) : self #

Returns the result of adding `self` and other.

def +(other : UInt64) : self #

Returns the result of adding `self` and other.

def +(other : UInt128) : self #

Returns the result of adding `self` and other.

def +(other : Float32) : self #

Returns the result of adding `self` and other.

def +(other : Float64) : self #

Returns the result of adding `self` and other.

def -(other : Int8) : self #

Returns the result of subtracting `self` and other.

def -(other : Int16) : self #

Returns the result of subtracting `self` and other.

def -(other : Int32) : self #

Returns the result of subtracting `self` and other.

def -(other : Int64) : self #

Returns the result of subtracting `self` and other.

def -(other : Int128) : self #

Returns the result of subtracting `self` and other.

def -(other : UInt8) : self #

Returns the result of subtracting `self` and other.

def -(other : UInt16) : self #

Returns the result of subtracting `self` and other.

def -(other : UInt32) : self #

Returns the result of subtracting `self` and other.

def -(other : UInt64) : self #

Returns the result of subtracting `self` and other.

def -(other : UInt128) : self #

Returns the result of subtracting `self` and other.

def -(other : Float32) : self #

Returns the result of subtracting `self` and other.

def -(other : Float64) : self #

Returns the result of subtracting `self` and other.

def /(other : Float64) : Float64 #

Returns the result of division `self` and other.

def /(other : Int8) : Float64 #

def /(other : UInt8) : Float64 #

def /(other : Int16) : Float64 #

def /(other : UInt16) : Float64 #

def /(other : Int32) : Float64 #

def /(other : UInt32) : Float64 #

def /(other : Int64) : Float64 #

def /(other : UInt64) : Float64 #

def /(other : Int128) : Float64 #

def /(other : UInt128) : Float64 #

def /(other : Float32) : Float64 #

def /(other : BigInt) : BigFloat #

def /(other : BigFloat) : BigFloat #

def /(other : BigDecimal) : BigDecimal #

def /(other : BigRational) : BigRational #

def <(other : Int8) : Bool #

Returns `true` if `self` is less than other.

def <(other : Int16) : Bool #

Returns `true` if `self` is less than other.

def <(other : Int32) : Bool #

Returns `true` if `self` is less than other.

def <(other : Int64) : Bool #

Returns `true` if `self` is less than other.

def <(other : Int128) : Bool #

Returns `true` if `self` is less than other.

def <(other : UInt8) : Bool #

Returns `true` if `self` is less than other.

def <(other : UInt16) : Bool #

Returns `true` if `self` is less than other.

def <(other : UInt32) : Bool #

Returns `true` if `self` is less than other.

def <(other : UInt64) : Bool #

Returns `true` if `self` is less than other.

def <(other : UInt128) : Bool #

Returns `true` if `self` is less than other.

def <(other : Float32) : Bool #

Returns `true` if `self` is less than other.

def <(other : Float64) : Bool #

Returns `true` if `self` is less than other.

def <=(other : Int8) : Bool #

Returns `true` if `self` is less than or equal to other.

def <=(other : Int16) : Bool #

Returns `true` if `self` is less than or equal to other.

def <=(other : Int32) : Bool #

Returns `true` if `self` is less than or equal to other.

def <=(other : Int64) : Bool #

Returns `true` if `self` is less than or equal to other.

def <=(other : Int128) : Bool #

Returns `true` if `self` is less than or equal to other.

def <=(other : UInt8) : Bool #

Returns `true` if `self` is less than or equal to other.

def <=(other : UInt16) : Bool #

Returns `true` if `self` is less than or equal to other.

def <=(other : UInt32) : Bool #

Returns `true` if `self` is less than or equal to other.

def <=(other : UInt64) : Bool #

Returns `true` if `self` is less than or equal to other.

def <=(other : UInt128) : Bool #

Returns `true` if `self` is less than or equal to other.

def <=(other : Float32) : Bool #

Returns `true` if `self` is less than or equal to other.

def <=(other : Float64) : Bool #

Returns `true` if `self` is less than or equal to other.

def ==(other : Int8) : Bool #

Returns `true` if `self` is equal to other.

def ==(other : Int16) : Bool #

Returns `true` if `self` is equal to other.

def ==(other : Int32) : Bool #

Returns `true` if `self` is equal to other.

def ==(other : Int64) : Bool #

Returns `true` if `self` is equal to other.

def ==(other : Int128) : Bool #

Returns `true` if `self` is equal to other.

def ==(other : UInt8) : Bool #

Returns `true` if `self` is equal to other.

def ==(other : UInt16) : Bool #

Returns `true` if `self` is equal to other.

def ==(other : UInt32) : Bool #

Returns `true` if `self` is equal to other.

def ==(other : UInt64) : Bool #

Returns `true` if `self` is equal to other.

def ==(other : UInt128) : Bool #

Returns `true` if `self` is equal to other.

def ==(other : Float32) : Bool #

Returns `true` if `self` is equal to other.

def ==(other : Float64) : Bool #

Returns `true` if `self` is equal to other.

def >(other : Int8) : Bool #

Returns `true` if `self` is greater than other.

def >(other : Int16) : Bool #

Returns `true` if `self` is greater than other.

def >(other : Int32) : Bool #

Returns `true` if `self` is greater than other.

def >(other : Int64) : Bool #

Returns `true` if `self` is greater than other.

def >(other : Int128) : Bool #

Returns `true` if `self` is greater than other.

def >(other : UInt8) : Bool #

Returns `true` if `self` is greater than other.

def >(other : UInt16) : Bool #

Returns `true` if `self` is greater than other.

def >(other : UInt32) : Bool #

Returns `true` if `self` is greater than other.

def >(other : UInt64) : Bool #

Returns `true` if `self` is greater than other.

def >(other : UInt128) : Bool #

Returns `true` if `self` is greater than other.

def >(other : Float32) : Bool #

Returns `true` if `self` is greater than other.

def >(other : Float64) : Bool #

Returns `true` if `self` is greater than other.

def >=(other : Int8) : Bool #

Returns `true` if `self` is greater than or equal to other.

def >=(other : Int16) : Bool #

Returns `true` if `self` is greater than or equal to other.

def >=(other : Int32) : Bool #

Returns `true` if `self` is greater than or equal to other.

def >=(other : Int64) : Bool #

Returns `true` if `self` is greater than or equal to other.

def >=(other : Int128) : Bool #

Returns `true` if `self` is greater than or equal to other.

def >=(other : UInt8) : Bool #

Returns `true` if `self` is greater than or equal to other.

def >=(other : UInt16) : Bool #

Returns `true` if `self` is greater than or equal to other.

def >=(other : UInt32) : Bool #

Returns `true` if `self` is greater than or equal to other.

def >=(other : UInt64) : Bool #

Returns `true` if `self` is greater than or equal to other.

def >=(other : UInt128) : Bool #

Returns `true` if `self` is greater than or equal to other.

def >=(other : Float32) : Bool #

Returns `true` if `self` is greater than or equal to other.

def >=(other : Float64) : Bool #

Returns `true` if `self` is greater than or equal to other.

def abs #
Description copied from struct Number

Returns the absolute value of this number.

``````123.abs  # => 123
-123.abs # => 123``````

def ceil : Float64 #

def clone #

def fdiv(other : Int8) : self #

Returns the float division of `self` and other.

def fdiv(other : Int16) : self #

Returns the float division of `self` and other.

def fdiv(other : Int32) : self #

Returns the float division of `self` and other.

def fdiv(other : Int64) : self #

Returns the float division of `self` and other.

def fdiv(other : Int128) : self #

Returns the float division of `self` and other.

def fdiv(other : UInt8) : self #

Returns the float division of `self` and other.

def fdiv(other : UInt16) : self #

Returns the float division of `self` and other.

def fdiv(other : UInt32) : self #

Returns the float division of `self` and other.

def fdiv(other : UInt64) : self #

Returns the float division of `self` and other.

def fdiv(other : UInt128) : self #

Returns the float division of `self` and other.

def fdiv(other : Float32) : self #

Returns the float division of `self` and other.

def fdiv(other : Float64) : self #

Returns the float division of `self` and other.

def floor : Float64 #

def next_float : Float64 #

Returns the least `Float64` that is greater than `self`.

def prev_float : Float64 #

Returns the greatest `Float64` that is less than `self`.

def round_away : Float64 #

Rounds towards the nearest integer. If both neighboring integers are equidistant, rounds away from zero.

def round_even : Float64 #

Rounds towards the nearest integer. If both neighboring integers are equidistant, rounds towards the even neighbor (Banker's rounding).

def to_f : Float64 #

Returns `self` converted to `Float64`. Raises `OverflowError` in case of overflow.

def to_f! : Float64 #

Returns `self` converted to `Float64`. In case of overflow infinity is returned.

def to_f32 : Float32 #

Returns `self` converted to `Float32`. Raises `OverflowError` in case of overflow.

def to_f32! : Float32 #

Returns `self` converted to `Float32`. In case of overflow infinity is returned.

def to_f64 : Float64 #

Returns `self` converted to `Float64`. Raises `OverflowError` in case of overflow.

def to_f64! : Float64 #

Returns `self` converted to `Float64`. In case of overflow infinity is returned.

def to_hexfloat(io : IO) : Nil #

Writes `self`'s hexadecimal-significand representation to the given io.

def to_hexfloat : String #

Returns the hexadecimal-significand representation of `self`.

The string format is defined in section 5.12.3 of IEEE 754-2008, and is the same as the `%a` specifier for `sprintf`. The integral part of the returned string is `0` if `self` is subnormal, otherwise `1`. The fractional part contains only significant digits.

``````1234.0625.to_hexfloat              # => "0x1.3484p+10"
Float64::MAX.to_hexfloat           # => "0x1.fffffffffffffp+1023"
Float64::MIN_SUBNORMAL.to_hexfloat # => "0x0.0000000000001p-1022"``````

def to_i : Int32 #

Returns `self` converted to `Int32`. Raises `OverflowError` in case of overflow.

def to_i! : Int32 #

Returns `self` converted to `Int32`. In case of overflow the result is undefined.

def to_i128 : Int128 #

Returns `self` converted to `Int128`. Raises `OverflowError` in case of overflow.

def to_i128! : Int128 #

Returns `self` converted to `Int128`. In case of overflow the result is undefined.

def to_i16 : Int16 #

Returns `self` converted to `Int16`. Raises `OverflowError` in case of overflow.

def to_i16! : Int16 #

Returns `self` converted to `Int16`. In case of overflow the result is undefined.

def to_i32 : Int32 #

Returns `self` converted to `Int32`. Raises `OverflowError` in case of overflow.

def to_i32! : Int32 #

Returns `self` converted to `Int32`. In case of overflow the result is undefined.

def to_i64 : Int64 #

Returns `self` converted to `Int64`. Raises `OverflowError` in case of overflow.

def to_i64! : Int64 #

Returns `self` converted to `Int64`. In case of overflow the result is undefined.

def to_i8 : Int8 #

Returns `self` converted to `Int8`. Raises `OverflowError` in case of overflow.

def to_i8! : Int8 #

Returns `self` converted to `Int8`. In case of overflow the result is undefined.

def to_s(io : IO) : Nil #
Description copied from class Object

Prints a nicely readable and concise string representation of this object, typically intended for users, to io.

This method is called when an object is interpolated in a string literal:

``"foo #{bar} baz" # calls bar.to_io with the builder for this string``

`IO#<<` calls this method to append an object to itself:

``io << bar # calls bar.to_s(io)``

Thus implementations must not interpolate `self` in a string literal or call `io << self` which both would lead to an endless loop.

Also see `#inspect(IO)`.

def to_s : String #
Description copied from class Object

Returns a nicely readable and concise string representation of this object, typically intended for users.

This method should usually not be overridden. It delegates to `#to_s(IO)` which can be overridden for custom implementations.

Also see `#inspect`.

def to_u : UInt32 #

Returns `self` converted to `UInt32`. Raises `OverflowError` in case of overflow.

def to_u! : UInt32 #

Returns `self` converted to `UInt32`. In case of overflow the result is undefined.

def to_u128 : UInt128 #

Returns `self` converted to `UInt128`. Raises `OverflowError` in case of overflow.

def to_u128! : UInt128 #

Returns `self` converted to `UInt128`. In case of overflow the result is undefined.

def to_u16 : UInt16 #

Returns `self` converted to `UInt16`. Raises `OverflowError` in case of overflow.

def to_u16! : UInt16 #

Returns `self` converted to `UInt16`. In case of overflow the result is undefined.

def to_u32 : UInt32 #

Returns `self` converted to `UInt32`. Raises `OverflowError` in case of overflow.

def to_u32! : UInt32 #

Returns `self` converted to `UInt32`. In case of overflow the result is undefined.

def to_u64 : UInt64 #

Returns `self` converted to `UInt64`. Raises `OverflowError` in case of overflow.

def to_u64! : UInt64 #

Returns `self` converted to `UInt64`. In case of overflow the result is undefined.

def to_u8 : UInt8 #

Returns `self` converted to `UInt8`. Raises `OverflowError` in case of overflow.

def to_u8! : UInt8 #

Returns `self` converted to `UInt8`. In case of overflow the result is undefined.

def trunc : Float64 #