最大値と最小値

8ビットであらわせる整数(符号付き)の範囲は-128~+127である。これを超える数を扱うことはできない。
注意が必要なのは演算結果だ。たとえば 120 + 8 = 128 は、足される数も足す数も8ビットであらわせるが、結果の128は8ビットの最大値を超えてしまうことだ。これをオーバーフローと呼び、プログラム側でエラー処理をしなければいけない。
逆に、-120 - 9 = -129 は最小値を下回ってしまう。これをアンダーフローと呼び、同様にプログラム側でエラー処理をする必要がある。
掛け算や割り算では、オーバーフローやアンダーフローが起きやすいので注意が必要だ。
逆に、-120 - 9 = -129 は最小値を下回ってしまう。これをアンダーフローと呼び、同様にプログラム側でエラー処理をする必要がある。
掛け算や割り算では、オーバーフローやアンダーフローが起きやすいので注意が必要だ。
ビット | 最小値 | 最大値 |
---|---|---|
8 | -128 | +127 |
16 | -32,768 | +32,767 |
32 | -21億4748万3648 | +21億4748万3647 |
64 | -922京3372兆368億5477万5808 | -922京3372兆368億5477万5807 |
32ビットと64ビット
現行のパソコン用OSは64ビット対応しているので、計測・計量可能な数を扱う分には、オーバーフローやアンダーフローが起きることはないだろう。
だが、32ビットのアプリケーションやライブラリを使っている場合には注意が必要だ。21億あまりとなると、大企業の会計処理を行おうとした途端にエラーとなってしまう。
システム開発する前に、利用する処理系で扱える数の最大値/最小値を確認しておこう。
だが、32ビットのアプリケーションやライブラリを使っている場合には注意が必要だ。21億あまりとなると、大企業の会計処理を行おうとした途端にエラーとなってしまう。
システム開発する前に、利用する処理系で扱える数の最大値/最小値を確認しておこう。
主なプログラミング言語における最大値と最小値
多くのプログラミング言語では、扱える整数の最大値と最小値をシステム定数として用意している。その一覧を掲げる。
言語 | 最小値 | 最大値 |
---|---|---|
JavaScript | Number.MIN_SAFE_INTEGER | Number.MAX_SAFE_INTEGER |
PHP | PHP_INT_MIN | PHP_INT_MAX |
C++ | LLONG_MIN | LLONG_MAXまたはULLONG_MIN |
Java | Integer.MIN_VALUE | Integer.MAX_VALUE |
Python | なし | sys.maxsize |
多倍長整数
上表の Python には最小値がない。じつは、最大値 sys.maxsize は添字などで使える最大値であり、これを超える大きさの整数の演算を行うことができる。
どういうことかというと、Python には多倍長整数ライブラリが内蔵されており、メモリが許す限り巨大な正の整数や負の整数を扱うことができるのである。
この機能を利用したサンプル・プログラムを「PHPとPythonで巨大素数を扱う」で紹介している。

JavaScriptやPHP、C++にも多倍長整数ライブラリが用意されてる。
JavaScript では BigInt型が用意されており、これを適用した定数や変数は上表の制約を受けずに計算ができる。「コラム:BigInt型 - 2.4 数値型の範囲と誤差」をご覧いただきたい。
PHP では GMP関数 が用意されており、これを適用した変数は上表の制約を受けずに計算ができる。「PHPで巨大素数の生成と判定」をご覧いただきたい。
C++ にも GMPライブラリ が用意されており、これを適用した変数は上表の制約を受けずに計算ができる。「C++ で巨大素数を判定・生成する」をご覧いただきたい。
ただし、多倍長整数ライブラリで利用できる演算は、処理系によって制約があるので留意されたい。
どういうことかというと、Python には多倍長整数ライブラリが内蔵されており、メモリが許す限り巨大な正の整数や負の整数を扱うことができるのである。
この機能を利用したサンプル・プログラムを「PHPとPythonで巨大素数を扱う」で紹介している。

JavaScriptやPHP、C++にも多倍長整数ライブラリが用意されてる。
JavaScript では BigInt型が用意されており、これを適用した定数や変数は上表の制約を受けずに計算ができる。「コラム:BigInt型 - 2.4 数値型の範囲と誤差」をご覧いただきたい。
PHP では GMP関数 が用意されており、これを適用した変数は上表の制約を受けずに計算ができる。「PHPで巨大素数の生成と判定」をご覧いただきたい。
C++ にも GMPライブラリ が用意されており、これを適用した変数は上表の制約を受けずに計算ができる。「C++ で巨大素数を判定・生成する」をご覧いただきたい。
ただし、多倍長整数ライブラリで利用できる演算は、処理系によって制約があるので留意されたい。
(この項おわり)
(2024年2月3日)記事「主なプログラミング言語における最大値と最小値」「多倍長整数」を追加