Ruby 2.4.0 リファレンスマニュアル > ライブラリ一覧 > 組み込みライブラリ > Bignumクラス

class Bignum

クラスの継承リスト: Bignum < Integer < Numeric < Comparable < Object < Kernel < BasicObject

要約

多倍長整数のクラスです。 演算の結果が Fixnum の範囲内の時には 自動的に Fixnum に変換されます。

扱うことのできる大きさはメモリサイズだけによって制限されます。 ビット演算については 2 の補数表現の無限長 のビットストリングとみなすことができます。特に負の数は左側に無限に 1 のビットが立っているように操作できます。Float との混合に関しては、 変換時に桁落ちが生じる可能性があります。

破壊的な変更

Ruby の Bignum クラスは immutable です。 つまり、オブジェクト自体を破壊的に変更することはできません。 Fixnum も同様です。

目次

インスタンスメソッド
% modulo & * ** + - -@ / div / << <=> == === >> [] ^ abs magnitude bit_length divmod eql? even? fdiv hash inspect to_s odd? remainder size to_f | ~

インスタンスメソッド

self % other -> Fixnum | Bignum | Float[permalink][rdoc]
modulo(other) -> Fixnum | Bignum | Float

算術演算子。剰余を計算します。

[PARAM] other:
二項演算の右側の引数(対象)
[RETURN]
計算結果
self & other -> Fixnum | Bignum[permalink][rdoc]

ビット二項演算子。論理積を計算します。

[PARAM] other:
数値
1 & 1 #=> 1
2 & 3 #=> 2
self * other -> Fixnum | Bignum | Float[permalink][rdoc]

算術演算子。積を計算します。

[PARAM] other:
二項演算の右側の引数(対象)
[RETURN]
計算結果
self ** other -> Fixnum | Bignum | Float[permalink][rdoc]

算術演算子。冪(べき乗)を計算します。

[PARAM] other:
二項演算の右側の引数(対象)
[RETURN]
計算結果
2 ** 3 # => 8
2 ** 0 # => 1
0 ** 0 # => 1
self + other -> Fixnum | Bignum | Float[permalink][rdoc]

算術演算子。和を計算します。

[PARAM] other:
二項演算の右側の引数(対象)
[RETURN]
計算結果
self - other -> Fixnum | Bignum | Float[permalink][rdoc]

算術演算子。差を計算します。

[PARAM] other:
二項演算の右側の引数(対象)
[RETURN]
計算結果
- self -> Integer[permalink][rdoc]

単項演算子の - です。 self の符号を反転させたものを返します。

self / other -> Fixnum | Bignum | Float[permalink][rdoc]
div(other) -> Fixnum | Bignum | Float

算術演算子。商を計算します。

[PARAM] other:
二項演算の右側の引数(対象)
[RETURN]
計算結果
self / other[permalink][rdoc] [redefined by mathn]

[TODO]

Bignum#quo と同じ働きをします(有理数または整数を返します)。

self << bits -> Fixnum | Bignum[permalink][rdoc]

シフト演算子。bits だけビットを左にシフトします。

[PARAM] bits:
シフトさせるビット数
printf("%#b\n", 0b0101 << 1) #=> 0b1010
p -1 << 1 #=> -2
self <=> other -> Fixnum | nil[permalink][rdoc]

self と other を比較して、self が大きい時に正、 等しい時に 0、小さい時に負の整数を返します。

[PARAM] other:
比較対象の数値
[RETURN]
-1 か 0 か 1 のいずれか
1 <=> 2 #=> -1
1 <=> 1 #=> 0
2 <=> 1 #=> 1
self == other -> bool[permalink][rdoc]
self === other -> bool

比較演算子。数値として等しいか判定します。

[PARAM] other:
比較対象の数値
[RETURN]
self と other が等しい場合 true を返します。 そうでなければ false を返します。
self >> bits -> Fixnum | Bignum[permalink][rdoc]

シフト演算子。bits だけビットを右にシフトします。

右シフトは、符号ビット(最上位ビット(MSB))が保持されます。 bitsが実数の場合、小数点以下を切り捨てた値でシフトします。

[PARAM] bits:
シフトさせるビット数
printf("%#b\n", 0b0101 >> 1) #=> 0b10
p -1 >> 1 #=> -1
self[nth] -> Fixnum[permalink][rdoc]

nth 番目のビット(最下位ビット(LSB)が 0 番目)が立っている時 1 を、そうでなければ 0 を返します。

[PARAM] nth:
何ビット目を指すかの数値
[RETURN]
1 か 0

self[nth]=bit (つまりビットの修正) がないのは、Numeric 関連クラスが immutable であるためです。

self ^ other -> Fixnum | Bignum[permalink][rdoc]

ビット二項演算子。排他的論理和を計算します。

[PARAM] other:
数値
1 ^ 1 #=> 0
2 ^ 3 #=> 1
abs -> Fixnum | Bignum[permalink][rdoc]
magnitude -> Fixnum | Bignum

self の絶対値を返します。

bit_length -> Integer[permalink][rdoc]

self を表すのに必要なビット数を返します。

「必要なビット数」とは符号ビットを除く最上位ビットの位置の事を意味しま す。2**n の場合は n+1 になります。self にそのようなビットがない(0 や -1 である)場合は 0 を返します。

例: 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

[SEE_ALSO] Fixnum#bit_length

divmod(other) -> [Integer, Numeric][permalink][rdoc]

self を other で割った商 q と余り r を、 [q, r] という 2 要素の配列にし て返します。 商 q は常に整数ですが、余り r は整数であるとは限りません。

[PARAM] other:
self を割る数。

[SEE_ALSO] Numeric#divmod

eql?(other) -> bool[permalink][rdoc]

self と other のクラスが等しくかつ同じ値である場合に true を返します。 そうでない場合に false を返します。

[PARAM] other:
self と比較したい数値。
(1 << 64) == (1 << 64).to_f    # => true
(1 << 64).eql?((1 << 64).to_f) # => false
even? -> bool[permalink][rdoc]

self が偶数の場合に true を返します。そうでない場合に false を返します。

fdiv(other) -> Float | Complex[permalink][rdoc]

self を other で割った商を Float で返します。 ただし Complex が関わる場合は例外です。 その場合も成分は Float になります。

[PARAM] other:
self を割る数を指定します。

[SEE_ALSO] Numeric#quo

hash -> Integer[permalink][rdoc]

self のハッシュ値を返します。

to_s(base = 10) -> String[permalink][rdoc]
inspect(base = 10) -> String

self を引数で指定した基数の文字列表現に変換します。

[PARAM] base:
基数を 2 から 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"
odd? -> bool[permalink][rdoc]

self が奇数の場合に true を返します。そうでない場合に false を返します。

remainder(other) -> Fixnum | Bignum | Float[permalink][rdoc]

self を other で割った余り r を返します。

r の符号は self と同じになります。

[PARAM] other:
self を割る数。

[SEE_ALSO] Bignum#divmod, Bignum#modulo, Numeric#modulo

size -> Fixnum[permalink][rdoc]

整数の実装上のサイズをバイト数で返します。

現在の実装では Fixnum は、sizeof(long) 固定(多くの 32 bit マシンで 4 バイト)、Bignumは、システム依存です。

p 1.size
p 0x1_0000_0000.size
# => 4
     8
to_f -> Float[permalink][rdoc]

値を浮動小数点数(Float)に変換します。

self | other -> Fixnum | Bignum[permalink][rdoc]

ビット二項演算子。論理和を計算します。

[PARAM] other:
数値
1 | 1 #=> 1
2 | 3 #=> 3
~ self -> Fixnum | Bignum[permalink][rdoc]

ビット演算子。否定を計算します。

~1  #=> -2
~3  #=> -4
~-4 #=> 3