# struct Float32

big/number.cr
float.cr
primitives.cr

## Constant Summary

DIGITS = `6`

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

EPSILON = `1.19209290e-07_f32`

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

INFINITY = `(1_f32 / 0_f32).as(Float32)`
MANT_DIGITS = `24`

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

MAX = `3.40282347e+38_f32`

Largest finite value

MAX_10_EXP = `38`

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

MAX_EXP = `128`

The maximum possible normal power of 2 exponent

MIN = `-3.40282347e+38_f32`

Smallest finite value

MIN_10_EXP = `-37`

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

MIN_EXP = `-125`

The minimum possible normal power of 2 exponent

MIN_POSITIVE = `1.17549435e-38_f32`

Smallest normal positive value, whose previous representable value is subnormal

MIN_SUBNORMAL = `1.0e-45_f32`

Smallest representable positive value, whose previous representable value is zero

NAN = `(0_f32 / 0_f32).as(Float32)`
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 `Float32` by invoking `String#to_f32` on value.

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

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

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

def self.new(value) #

Returns a `Float32` by invoking `#to_f32` on value.

def self.new!(value) : self #

Returns a `Float32` by invoking `#to_f32!` 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.

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

## Class Method Detail

def self.from_json_object_key?(key : String) : Float32 | 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.

``````Float32.parse_hexfloat?("0x123.456p7")     # => 37282.6875_f32
Float32.parse_hexfloat?("0x1.fffffep+127") # => Float32::MAX
Float32.parse_hexfloat?("-inf")            # => -Float32::INFINITY
Float32.parse_hexfloat?("0x1")             # => nil
Float32.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 : Float32) : Float32 #

def **(other) : Float32 #

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 : Float32) : Float32 #

Returns the result of division `self` and other.

def /(other : Int8) : Float32 #

def /(other : UInt8) : Float32 #

def /(other : Int16) : Float32 #

def /(other : UInt16) : Float32 #

def /(other : Int32) : Float32 #

def /(other : UInt32) : Float32 #

def /(other : Int64) : Float32 #

def /(other : UInt64) : Float32 #

def /(other : Int128) : Float32 #

def /(other : UInt128) : Float32 #

def /(other : Float64) : 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 ceil : Float32 #

Rounds towards positive infinity.

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 : Float32 #

Rounds towards negative infinity.

def next_float : Float32 #

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

def prev_float : Float32 #

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

def round_away : Float32 #

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

def round_even : Float32 #

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_f32.to_hexfloat          # => "0x1.3484p+10"
Float32::MAX.to_hexfloat           # => "0x1.fffffep+127"
Float32::MIN_SUBNORMAL.to_hexfloat # => "0x0.000002p-126"``````

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 : Float32 #

Rounds towards zero.