Class: Bignum
| Relationships & Source Files | |
| Super Chains via Extension / Inclusion / Inheritance | |
|
Class Chain:
|
|
|
Instance Chain:
|
|
| Inherits: | Integer |
| Defined in: | bignum.c |
Overview
Bignum objects hold integers outside the range of ::Fixnum. Bignum objects are created automatically when integer calculations would otherwise overflow a ::Fixnum. When a calculation involving Bignum objects returns a result that will fit in a ::Fixnum, the result is automatically converted.
For the purposes of the bitwise operations and #[], a Bignum is treated as if it were an infinite-length bitstring with 2's complement representation.
While Fixnum values are immediate, Bignum objects are not—assignment and parameter passing work with references to objects, not the objects themselves.
Constant Summary
-
GMP_VERSION =
# File 'bignum.c', line 7042
The version of loaded GMP.
rb_sprintf("GMP %s", gmp_version)
Instance Attribute Summary
-
#even? ⇒ Boolean
readonly
Returns
trueif big is an even number. -
#odd? ⇒ Boolean
readonly
Returns
trueif big is an odd number.
::Integer - Inherited
| #even? | Returns |
| #integer? | Since |
| #odd? | Returns |
::Numeric - Inherited
Instance Method Summary
-
#%(other) ⇒ Numeric
(also: #modulo)
Returns big modulo other.
-
#&(numeric) ⇒ Integer
Performs bitwise
andbetween big and numeric. -
#*(other) ⇒ Numeric
Multiplies big and other, returning the result.
-
#**(exponent) ⇒ Numeric
Raises big to the exponent power (which may be an integer, float, or anything that will coerce to a number).
-
#+(other) ⇒ Numeric
Adds big and other, returning the result.
-
#-(other) ⇒ Numeric
Subtracts other from big, returning the result.
-
#- ⇒ Integer
Unary minus (returns an integer whose value is 0-big).
-
#/(other) ⇒ Numeric
Performs division: the class of the resulting object depends on the class of
numericand on the magnitude of the result. -
#<(real) ⇒ Boolean
Returns
trueif the value ofbigis less than that ofreal. -
#<<(numeric) ⇒ Integer
Shifts big left numeric positions (right if numeric is negative).
-
#<=(real) ⇒ Boolean
Returns
trueif the value ofbigis less than or equal to that ofreal. -
#<=>(numeric) ⇒ 1, ...
Comparison—Returns -1, 0, or +1 depending on whether
bigis less than, equal to, or greater thannumeric. -
#==(obj) ⇒ Boolean
(also: #===)
Returns
trueonly if obj has the same value as big. -
#===(obj) ⇒ Boolean
Alias for #==.
-
#>(real) ⇒ Boolean
Returns
trueif the value ofbigis greater than that ofreal. -
#>=(real) ⇒ Boolean
Returns
trueif the value ofbigis greater than or equal to that ofreal. -
#>>(numeric) ⇒ Integer
Shifts big right numeric positions (left if numeric is negative).
-
#[](n) ⇒ 0, 1
Bit Reference—Returns the nth bit in the (assumed) binary representation of big, where big is the least significant bit.
-
#^(numeric) ⇒ Integer
Performs bitwise exclusive or between big and numeric.
-
#abs ⇒ Bignum
(also: #magnitude)
Returns the absolute value of big.
-
#bit_length ⇒ Integer
Returns the number of bits of the value of int.
-
#coerce(numeric) ⇒ Array
Returns an array with both a
numericand abigrepresented asBignumobjects. -
#div(other) ⇒ Integer
Performs integer division: returns integer value.
-
#divmod(numeric) ⇒ Array
See Numeric#divmod.
-
#eql?(obj) ⇒ Boolean
Returns
trueonly if obj is aBignumwith the same value as big. -
#fdiv(numeric) ⇒ Float
Returns the floating point result of dividing big by numeric.
-
#hash ⇒ Fixnum
Compute a hash based on the value of big.
-
#inspect(base = 10) ⇒ String
Alias for #to_s.
-
#magnitude ⇒ Bignum
Alias for #abs.
-
#modulo(other) ⇒ Numeric
Alias for #%.
-
#remainder(numeric) ⇒ Numeric
Returns the remainder after dividing big by numeric.
-
#size ⇒ Integer
Returns the number of bytes in the machine representation of big.
-
#to_f ⇒ Float
Converts big to a ::Float.
-
#to_s(base = 10) ⇒ String
(also: #inspect)
Returns a string containing the representation of big radix base (2 through 36).
-
#|(numeric) ⇒ Integer
Performs bitwise
orbetween big and numeric. -
#~ ⇒ Integer
Inverts the bits in big.
::Integer - Inherited
| #ceil | Alias for Integer#to_i. |
| #chr | Returns a string containing the character represented by the |
| #denominator | Returns 1. |
| #downto | Iterates the given block, passing decreasing values from |
| #floor | Alias for Integer#to_i. |
| #gcd | Returns the greatest common divisor (always positive). |
| #gcdlcm | Returns an array; [int.gcd(int2), int.lcm(int2)]. |
| #lcm | Returns the least common multiple (always positive). |
| #next | Returns the ::Integer equal to |
| #numerator | Returns self. |
| #ord | Returns the |
| #pred | Returns the ::Integer equal to |
| #rationalize | Returns the value as a rational. |
| #round | Rounds |
| #succ | Alias for Integer#next. |
| #times | Iterates the given block |
| #to_i | As |
| #to_int | Alias for Integer#to_i. |
| #to_r | Returns the value as a rational. |
| #truncate | Alias for Integer#to_i. |
| #upto | Iterates the given block, passing in integer values from |
::Numeric - Inherited
| #% | x.modulo(y) means x-y*(x/y).floor. |
| #+@ | Unary Plus—Returns the receiver's value. |
| #-@ | Unary Minus—Returns the receiver's value, negated. |
| #<=> | Returns zero if |
| #abs | Returns the absolute value of |
| #abs2 | Returns square of self. |
| #angle | Alias for Numeric#arg. |
| #arg | Returns 0 if the value is positive, pi otherwise. |
| #ceil | Returns the smallest possible ::Integer that is greater than or equal to |
| #coerce | If a +numeric is the same type as |
| #conj | Returns self. |
| #conjugate | Alias for Numeric#conj. |
| #denominator | Returns the denominator (always positive). |
| #div | Uses #/ to perform division, then converts the result to an integer. |
| #divmod | Returns an array containing the quotient and modulus obtained by dividing |
| #eql? | Returns |
| #fdiv | Returns float division. |
| #floor | Returns the largest integer less than or equal to |
| #i | Returns the corresponding imaginary number. |
| #imag | Returns zero. |
| #imaginary | Alias for Numeric#imag. |
| #initialize_copy | Numerics are immutable values, which should not be copied. |
| #magnitude | Alias for Numeric#abs. |
| #modulo | Alias for Numeric#%. |
| #numerator | Returns the numerator. |
| #phase | Alias for Numeric#arg. |
| #polar | Returns an array; [num.abs, num.arg]. |
| #quo | Returns most exact division (rational for integers, float for floats). |
| #rect | Returns an array; [num, 0]. |
| #rectangular | Alias for Numeric#rect. |
| #remainder | x.remainder(y) means x-y*(x/y).truncate. |
| #round | Rounds |
| #singleton_method_added | Trap attempts to add methods to ::Numeric objects. |
| #step | Invokes the given block with the sequence of numbers starting at |
| #to_c | Returns the value as a complex. |
| #to_int | Invokes the child class's |
| #truncate | Returns |
::Comparable - Included
| #< | Compares two objects based on the receiver's #<=> method, returning true if it returns -1. |
| #<= | Compares two objects based on the receiver's #<=> method, returning true if it returns -1 or 0. |
| #== | Compares two objects based on the receiver's #<=> method, returning true if it returns 0. |
| #> | Compares two objects based on the receiver's #<=> method, returning true if it returns 1. |
| #>= | Compares two objects based on the receiver's #<=> method, returning true if it returns 0 or 1. |
| #between? |
Instance Attribute Details
#even? ⇒ Boolean (readonly)
Returns true if big is an even number.
#odd? ⇒ Boolean (readonly)
Returns true if big is an odd number.
Instance Method Details
Also known as: #modulo
Returns big modulo other. See Numeric#divmod for more information.
#&(numeric) ⇒ Integer
Performs bitwise and between big and numeric.
#*(other) ⇒ Numeric
Multiplies big and other, returning the result.
#**(exponent) ⇒ Numeric
#+(other) ⇒ Numeric
Adds big and other, returning the result.
#-(other) ⇒ Numeric
Subtracts other from big, returning the result.
#- ⇒ Integer
Unary minus (returns an integer whose value is 0-big)
#/(other) ⇒ Numeric
Performs division: the class of the resulting object depends on the class of numeric and on the magnitude of the result.
#<(real) ⇒ Boolean
Returns true if the value of big is less than that of real.
#<<(numeric) ⇒ Integer
Shifts big left numeric positions (right if numeric is negative).
#<=(real) ⇒ Boolean
Returns true if the value of big is less than or equal to that of real.
#<=>(numeric) ⇒ 1, ...
Comparison—Returns -1, 0, or +1 depending on whether big is less than, equal to, or greater than numeric. This is the basis for the tests in ::Comparable.
nil is returned if the two values are incomparable.
#==(obj) ⇒ Boolean Also known as: #===
Returns true only if obj has the same value as big. Contrast this with #eql?, which requires obj to be a Bignum.
68719476736 == 68719476736.0 #=> true
#==(obj) ⇒ Boolean
#===(obj) ⇒ Boolean
Boolean
#===(obj) ⇒ Boolean
Alias for #==.
#>(real) ⇒ Boolean
Returns true if the value of big is greater than that of real.
#>=(real) ⇒ Boolean
Returns true if the value of big is greater than or equal to that of real.
#>>(numeric) ⇒ Integer
Shifts big right numeric positions (left if numeric is negative).
#[](n) ⇒ 0, 1
Bit Reference—Returns the nth bit in the (assumed) binary representation of big, where big is the least significant bit.
a = 9**15
50.downto(0) do |n|
print a[n]
end
produces:
000101110110100000111000011110010100111100010111001
#^(numeric) ⇒ Integer
Performs bitwise exclusive or between big and numeric.
#abs ⇒ Bignum
#magnitude ⇒ Bignum
Also known as: #magnitude
Bignum
#magnitude ⇒ Bignum
Returns the absolute value of big.
-1234567890987654321.abs #=> 1234567890987654321
#bit_length ⇒ Integer
Returns the number of bits of the value of int.
“the number of bits” means that the bit position of the highest bit which is different to the sign bit. (The bit position of the bit 2**n is n+1.) If there is no such bit (zero or minus one), zero is returned.
I.e. This method returns ceil(log2(int < 0 ? -int : int+1)).
(-2**10000-1).bit_length #=> 10001
(-2**10000).bit_length #=> 10000
(-2**10000+1).bit_length #=> 10000
(-2**1000-1).bit_length #=> 1001
(-2**1000).bit_length #=> 1000
(-2**1000+1).bit_length #=> 1000
(2**1000-1).bit_length #=> 1000
(2**1000).bit_length #=> 1001
(2**1000+1).bit_length #=> 1001
(2**10000-1).bit_length #=> 10000
(2**10000).bit_length #=> 10001
(2**10000+1).bit_length #=> 10001
This method can be used to detect overflow in Array#pack as follows.
if n.bit_length < 32
[n].pack("l") # no overflow
else
raise "overflow"
end
#coerce(numeric) ⇒ Array
Returns an array with both a numeric and a big represented as Bignum objects.
This is achieved by converting numeric to a Bignum.
A TypeError is raised if the numeric is not a ::Fixnum or Bignum type.
(0x3FFFFFFFFFFFFFFF+1).coerce(42) #=> [42, 4611686018427387904]
#div(other) ⇒ Integer
Performs integer division: returns integer value.
#divmod(numeric) ⇒ Array
See Numeric#divmod.
#eql?(obj) ⇒ Boolean
Returns true only if obj is a Bignum with the same value as big. Contrast this with #==, which performs type conversions.
68719476736.eql?(68719476736.0) #=> false
#fdiv(numeric) ⇒ Float
Returns the floating point result of dividing big by numeric.
-1234567890987654321.fdiv(13731) #=> -89910996357705.5
-1234567890987654321.fdiv(13731.24) #=> -89909424858035.7
#hash ⇒ Fixnum
Compute a hash based on the value of big.
See also Object#hash.
Alias for #to_s.
#abs ⇒ Bignum
#magnitude ⇒ Bignum
Bignum
#magnitude ⇒ Bignum
Alias for #abs.
Alias for #%.
#remainder(numeric) ⇒ Numeric
Returns the remainder after dividing big by numeric.
-1234567890987654321.remainder(13731) #=> -6966
-1234567890987654321.remainder(13731.24) #=> -9906.22531493148
#size ⇒ Integer
Returns the number of bytes in the machine representation of big.
(256**10 - 1).size #=> 12
(256**20 - 1).size #=> 20
(256**40 - 1).size #=> 40
#to_f ⇒ Float
#to_s(base = 10) ⇒ String Also known as: #inspect
Returns a string containing the representation of big radix base (2 through 36).
12345654321.to_s #=> "12345654321"
12345654321.to_s(2) #=> "1011011111110110111011110000110001"
12345654321.to_s(8) #=> "133766736061"
12345654321.to_s(16) #=> "2dfdbbc31"
78546939656932.to_s(36) #=> "rubyrules"
#|(numeric) ⇒ Integer
Performs bitwise or between big and numeric.
#~ ⇒ Integer
Inverts the bits in big. As Bignums are conceptually infinite length, the result acts as if it had an infinite number of one bits to the left. In hex representations, this is displayed as two periods to the left of the digits.
sprintf("%X", ~0x1122334455) #=> "..FEEDDCCBBAA"