top page > computer > haskell > web_lecture > for_programmer > integer_int.html
更新日:
文責: 重城良国

2種類の整数型

はじめに

整数としてIntegerのみを見てきた。Integer型の値ではメモリの使用量以外に値の範囲を考えなくて良い。しかし、実効効率などの関係でもうひとつの整数型を使う標準的な関数がいくつかある。

多倍長整数

Integer型の値は理論的には-∞から∞の範囲を表現できる。

% ghci
Prelude> 3
3
Prelude> :t it
it :: Integer
Prelude> 12345678901234567890123467890
123456789012345678901234567890

固定長整数

リストの長さを計算する関数lengthなどのいくつかの標準的な関数はInteger型の値ではなく固定長整数であるInt型の値を使う。

Prelude> length "Hello"
5
Prelude> :t it
it :: Int
Prelude> length ["Clean", "FP", "Gofer", "Hope", "Hope+", "Id", "ISWIM", "KRC", "Lisp", "Miranda", "ML", "Standard ML", "Orwell", "SASL", "SISAL", "Scheme"]
16
Prelude> :t it
it :: Int

範囲

Haskell 2010ではInt型の値はすくなくとも-2^29から2^29-1を含む範囲の整数型だ。

Haskell 2010 language report: 18.1 Signed integer types

GHCではInt型の値の範囲は処理系以存だ。値の範囲は32ビットマシンでは-2^31から2^31-1までで64ビットマシンでは-2^63から2^63-1までだ。

The Glorious Glasgow Haskell Compilation System User's Guide: GHC's interpretation of undefined behaviour in Haskell 98 and Haskell 2010

minBound, maxBoundという値で確認できる。

Prelude> minBound :: Int
-2147483648
Prelude> maxBound :: Int
2147483647

嫌なバグ

Int型を使っているとときどき嫌なバグに遭遇する。

Prelude> let n = maxBound :: Int
Prelude> n
2147483647
Prelude> n + 1
-2147483648

「モンテカルロ法の説明」へもどる 「疑似乱数列の生成」へ

正当なCSSです! HTML5 Powered with CSS3 / styling, and Semantics