struct BigFloat
Overview
A BigFloat
can represent arbitrarily large floats.
It is implemented under the hood with GMP.
NOTE To use BigFloat
, you must explicitly import it with require "big"
Included Modules
Defined in:
big.crbig/big_decimal.cr
big/big_float.cr
big/big_rational.cr
big/number.cr
Constructors
- .new(num : Float, precision : Int)
- .new(str : String)
- .new(num : BigInt)
- .new(num : BigRational)
- .new(num : BigFloat)
- .new(num : Int8 | Int16 | Int32)
- .new(num : UInt8 | UInt16 | UInt32)
- .new(num : Int64)
- .new(num : UInt64)
- .new(num : Float::Primitive)
- .new(num : Number)
- .new(mpf : LibGMP::MPF)
- .new
- .new(&)
Class Method Summary
Instance Method Summary
- #*(other : Number) : BigFloat
- #**(other : Int) : BigFloat
- #+(other : Number) : BigFloat
- #-(other : Number) : BigFloat
- #- : BigFloat
- #/(other : BigFloat) : BigFloat
- #/(other : BigInt) : BigFloat
- #/(other : BigDecimal) : BigDecimal
- #/(other : BigRational) : BigRational
- #/(other : UInt8 | UInt16 | UInt32 | UInt64) : BigFloat
- #/(other : Int8) : BigFloat
- #/(other : Int16) : BigFloat
- #/(other : Int32) : BigFloat
- #/(other : Int64) : BigFloat
- #/(other : Int128) : BigFloat
- #/(other : UInt128) : BigFloat
- #/(other : Float32) : BigFloat
- #/(other : Float64) : BigFloat
-
#<=>(other : BigFloat)
The comparison operator.
- #<=>(other : BigInt)
- #<=>(other : Float::Primitive)
- #<=>(other : BigRational)
- #<=>(other : BigDecimal)
- #<=>(other : Number)
-
#abs : BigFloat
Returns the absolute value of this number.
-
#ceil : BigFloat
Rounds towards positive infinity.
- #clone
- #fdiv(other : Number::Primitive) : self
-
#floor : BigFloat
Rounds towards negative infinity.
-
#hash(hasher)
TODO improve this
-
#round_away : self
Rounds towards the nearest integer.
-
#round_even : self
Rounds towards the nearest integer.
- #to_big_f : BigFloat
- #to_big_i : BigInt
- #to_f : Float64
- #to_f! : Float64
- #to_f32 : Float32
- #to_f32! : Float32
- #to_f64 : Float64
- #to_f64! : Float64
- #to_i : Int32
- #to_i! : Int32
- #to_i16 : Int16
- #to_i16! : Int16
- #to_i32 : Int32
- #to_i32! : Int32
- #to_i64 : Int64
- #to_i64! : Int64
- #to_i8 : Int8
- #to_i8! : Int8
-
#to_s(io : IO) : Nil
Prints a nicely readable and concise string representation of this object, typically intended for users, to io.
- #to_u : UInt32
- #to_u! : UInt32
- #to_u16 : UInt16
- #to_u16! : UInt16
- #to_u32 : UInt32
- #to_u32! : UInt32
- #to_u64 : UInt64
- #to_u64! : UInt64
- #to_u8 : UInt8
- #to_u8! : UInt8
- #to_unsafe
-
#trunc : BigFloat
Rounds towards zero.
Instance methods inherited from module Comparable(Float)
<(other : T) : Bool
<,
<=(other : T)
<=,
<=>(other : T)
<=>,
==(other : T)
==,
>(other : T) : Bool
>,
>=(other : T)
>=,
clamp(min, max)clamp(range : Range) clamp
Instance methods inherited from module Comparable(BigFloat)
<(other : T) : Bool
<,
<=(other : T)
<=,
<=>(other : T)
<=>,
==(other : T)
==,
>(other : T) : Bool
>,
>=(other : T)
>=,
clamp(min, max)clamp(range : Range) clamp
Instance methods inherited from module Comparable(Int)
<(other : T) : Bool
<,
<=(other : T)
<=,
<=>(other : T)
<=>,
==(other : T)
==,
>(other : T) : Bool
>,
>=(other : T)
>=,
clamp(min, max)clamp(range : Range) clamp
Instance methods inherited from struct Float
%(other)
%,
-
-,
//(other)
//,
<=>(other : BigInt)<=>(other : BigFloat)
<=>(other : BigRational)
<=>(other : BigDecimal) <=>, days : Time::Span days, fdiv(other : BigInt | BigFloat | BigDecimal | BigRational) : self fdiv, finite? : Bool finite?, hash(hasher) hash, hours : Time::Span hours, infinite? : Int32 | Nil infinite?, microseconds : Time::Span microseconds, milliseconds : Time::Span milliseconds, minutes : Time::Span minutes, modulo(other) modulo, nan? : Bool nan?, nanoseconds : Time::Span nanoseconds, remainder(other) remainder, seconds : Time::Span seconds, to_big_d : BigDecimal to_big_d, to_big_i : BigInt to_big_i, to_big_r : BigRational to_big_r, to_io(io : IO, format : IO::ByteFormat) : Nil to_io, to_json(json : JSON::Builder) : Nil to_json, to_json_object_key : String to_json_object_key, to_yaml(yaml : YAML::Nodes::Builder) : Nil to_yaml, weeks : Time::Span weeks
Constructor methods inherited from struct Float
from_io(io : IO, format : IO::ByteFormat) : self
from_io
Instance methods inherited from module Comparable(BigDecimal)
<(other : T) : Bool
<,
<=(other : T)
<=,
<=>(other : T)
<=>,
==(other : T)
==,
>(other : T) : Bool
>,
>=(other : T)
>=,
clamp(min, max)clamp(range : Range) clamp
Instance methods inherited from module Comparable(BigRational)
<(other : T) : Bool
<,
<=(other : T)
<=,
<=>(other : T)
<=>,
==(other : T)
==,
>(other : T) : Bool
>,
>=(other : T)
>=,
clamp(min, max)clamp(range : Range) clamp
Instance methods inherited from module Comparable(BigInt)
<(other : T) : Bool
<,
<=(other : T)
<=,
<=>(other : T)
<=>,
==(other : T)
==,
>(other : T) : Bool
>,
>=(other : T)
>=,
clamp(min, max)clamp(range : Range) clamp
Instance methods inherited from struct Number
*(other : BigFloat) : BigFloat*(other : Complex) : Complex *, +(other : BigFloat)
+(other : Complex) : Complex
+ +, -(other : BigFloat)
-(other : Complex) : Complex -, /(other : BigFloat) : BigFloat
/(other : Complex) : Complex /, //(other) //, <=>(other) : Int32 | Nil <=>, ==(other : Complex) ==, abs : self abs, abs2 abs2, cis : Complex cis, divmod(number) divmod, format(io : IO, separator = '.', delimiter = ',', decimal_places : Int | Nil = nil, *, group : Int = 3, only_significant : Bool = false) : Nil
format(separator = '.', delimiter = ',', decimal_places : Int | Nil = nil, *, group : Int = 3, only_significant : Bool = false) : String format, humanize(io : IO, precision = 3, separator = '.', delimiter = ',', *, base = 10 ** 3, significant = true, prefixes : Indexable = SI_PREFIXES) : Nil
humanize(io : IO, precision = 3, separator = '.', delimiter = ',', *, base = 10 ** 3, significant = true, prefixes : Proc) : Nil
humanize(precision = 3, separator = '.', delimiter = ',', *, base = 10 ** 3, significant = true, prefixes = SI_PREFIXES) : String
humanize(io : IO, precision = 3, separator = '.', delimiter = ',', *, base = 10 ** 3, significant = true, &prefixes : Int32, Float64 -> Tuple(Int32, _) | Tuple(Int32, _, Bool)) : Nil
humanize(precision = 3, separator = '.', delimiter = ',', *, base = 10 ** 3, significant = true, &) : String
humanize(precision = 3, separator = '.', delimiter = ',', *, base = 10 ** 3, significant = true, prefixes : Proc) : String humanize, i : Complex i, negative? : Bool negative?, positive? : Bool positive?, round(mode : RoundingMode = :ties_even) : self
round(digits : Number, base = 10, *, mode : RoundingMode = :ties_even) round, sign : Int32 sign, significant(digits, base = 10) significant, step(*, to limit = nil, exclusive : Bool = false, &) : Nil
step(*, to limit = nil, exclusive : Bool = false) step, to_big_f : BigFloat to_big_f, to_c : Complex to_c, to_yaml(yaml : YAML::Nodes::Builder) : Nil to_yaml, zero? : Bool zero?
Constructor methods inherited from struct Number
additive_identity : self
additive_identity,
multiplicative_identity : self
multiplicative_identity,
zero : self
zero
Class methods inherited from struct Number
si_prefix(magnitude : Int, prefixes = SI_PREFIXES) : Char | Nil
si_prefix
Instance methods inherited from module Comparable(BigFloat)
<(other : T) : Bool
<,
<=(other : T)
<=,
<=>(other : T)
<=>,
==(other : T)
==,
>(other : T) : Bool
>,
>=(other : T)
>=,
clamp(min, max)clamp(range : Range) clamp
Instance methods inherited from module Steppable
step(*, to limit = nil, by step, exclusive : Bool = false, &) : Nilstep(*, to limit = nil, by step, exclusive : Bool = false) step
Instance methods inherited from module Comparable(Number)
<(other : T) : Bool
<,
<=(other : T)
<=,
<=>(other : T)
<=>,
==(other : T)
==,
>(other : T) : Bool
>,
>=(other : T)
>=,
clamp(min, max)clamp(range : Range) clamp
Instance methods inherited from struct Value
==(other : JSON::Any)==(other : YAML::Any)
==(other) ==, dup dup
Instance methods inherited from class Object
! : Bool
!,
!=(other)
!=,
!~(other)
!~,
==(other)
==,
===(other : JSON::Any)===(other : YAML::Any)
===(other) ===, =~(other) =~, as(type : Class) as, as?(type : Class) as?, class class, dup dup, hash(hasher)
hash hash, in?(collection : Object) : Bool
in?(*values : Object) : Bool in?, inspect(io : IO) : Nil
inspect : String inspect, is_a?(type : Class) : Bool is_a?, itself itself, nil? : Bool nil?, not_nil!(message)
not_nil! not_nil!, pretty_inspect(width = 79, newline = "\n", indent = 0) : String pretty_inspect, pretty_print(pp : PrettyPrint) : Nil pretty_print, responds_to?(name : Symbol) : Bool responds_to?, tap(&) tap, to_json(io : IO) : Nil
to_json : String to_json, to_pretty_json(indent : String = " ") : String
to_pretty_json(io : IO, indent : String = " ") : Nil to_pretty_json, to_s(io : IO) : Nil
to_s : String to_s, to_yaml(io : IO) : Nil
to_yaml : String to_yaml, try(&) try, unsafe_as(type : T.class) forall T unsafe_as
Class methods inherited from class Object
from_json(string_or_io, root : String)from_json(string_or_io) from_json, from_yaml(string_or_io : String | IO) from_yaml
Constructor Detail
Class Method Detail
Instance Method Detail
The comparison operator. Returns 0
if the two objects are equal,
a negative number if this object is considered less than other,
a positive number if this object is considered greater than other,
or nil
if the two objects are not comparable.
Subclasses define this method to provide class-specific ordering.
The comparison operator is usually used to sort values:
# Sort in a descending way:
[3, 1, 2].sort { |x, y| y <=> x } # => [3, 2, 1]
# Sort in an ascending way:
[3, 1, 2].sort { |x, y| x <=> y } # => [1, 2, 3]
Returns the absolute value of this number.
123.abs # => 123
-123.abs # => 123
Rounds towards the nearest integer. If both neighboring integers are equidistant, rounds away from zero.
Rounds towards the nearest integer. If both neighboring integers are equidistant, rounds towards the even neighbor (Banker's rounding).
Returns a BigInt
representing this float (rounded using #floor
).
require "big"
1212341515125412412412421.0.to_big_i
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)
.