最大値・最小値の定数
最大値・最小値の定数は、データ型の最大桁数などを定数にしたものです。
プログラムを作成したときに、オーバーフローなどの不具合が発生したときには、データ型の最大値を超えている可能性があります。
その場合は、これらの定数で上限値を決めると良いでしょう。
最大値・最小値の定数
| 定数 | 数値 | 説明 |
| CHAR_MIN | -128 | char型の最小値 |
| CHAR_MAX | 127 | char型の最大値 |
| UCHAR_MAX | 255 | uchar型の最大値 |
| SHORT_MIN | -32768 | short型の最小値 |
| SHORT_MAX | 32767 | short型の最大値 |
| USHORT_MAX | 65535 | ushort型の最大値 |
| INT_MIN | -2147483648 | int型の最小値 |
| INT_MAX | 2147483647 | int型の最大値 |
| UINT_MAX | 4294967295 | uint型の最大値 |
| LONG_MIN | -9.22337e+18 | long型の最小値 |
| LONG_MAX | 9.22337e+18 | long型の最大値 |
| ULONG_MAX | 1.84467e+19 | ulong型の最大値 |
| DBL_MIN | 0.00E-01 | double型の最小値(正数) |
| DBL_MAX | 1.7976931348623158e+308 | double型の最大値 |
| DBL_EPSILON | 2.22E-16 | 以下条件時のdouble型の最小値 1.0+DBL_EPSILON != 1.0 |
| DBL_DIG | 15 | double型の精度(桁数) |
| DBL_MANT_DIG | 53 | double型の仮数部ビット数 |
| DBL_MAX_10_EXP | 308 | double型の指数部最大数(10進数) |
| DBL_MAX_EXP | 1024 | double型の指数部最大数(バイナリ) |
| DBL_MIN_10_EXP | -307 | double型の指数部最小数(10進数) |
| DBL_MIN_EXP | -1021 | double型の指数部最小数(バイナリ) |
| FLT_MIN | 1.18E-38 | float型の最小値(正数) |
| FLT_MAX | 3.40E+38 | float型の最大値 |
| FLT_EPSILON | 1.192092896e-07 | 以下条件時のfloat型の最小値 1.0+FLT_EPSILON != 1.0 |
| FLT_DIG | 6 | float型の精度(桁数) |
| FLT_MANT_DIG | 24 | float型の仮数部ビット数 |
| FLT_MAX_10_EXP | 38 | float型の指数部最大数(10進数) |
| FLT_MAX_EXP | 128 | float型の指数部最大数(バイナリ) |
| FLT_MIN_10_EXP | -37 | float型の指数部最小数(10進数) |
| FLT_MIN_EXP | -125 | float型の指数部最小数(バイナリ) |
最大値・最小値の定数の使い方
オーバーフローなどの不具合を回避するために使用することが多いでしょう。
大抵のロジックでは、オーバーフローは起こりませんが、ときどき発生するので、上限値を決めておくと良いでしょう。
例えば、以下のように使用します。
void OnInit() {
for(int i = 0; i < INT_MAX; i++){
Print(i);
}
}
プログラム例
以下は、主要な最大値・最小値の定数をエキスパートログに出力するプログラム例です。
//+------------------------------------------------------------------+
//| 最大値・最小値の定数 プログラム例 |
//+------------------------------------------------------------------+
void OnInit()
{
// --- 整数型の最大値・最小値 ---
Print("=== 整数型の最大値・最小値 ===");
Print("CHAR_MIN = ", CHAR_MIN);
Print("CHAR_MAX = ", CHAR_MAX);
Print("UCHAR_MAX = ", UCHAR_MAX);
Print("SHORT_MIN = ", SHORT_MIN);
Print("SHORT_MAX = ", SHORT_MAX);
Print("USHORT_MAX = ", USHORT_MAX);
Print("INT_MIN = ", INT_MIN);
Print("INT_MAX = ", INT_MAX);
Print("UINT_MAX = ", UINT_MAX);
Print("LONG_MIN = ", LONG_MIN);
Print("LONG_MAX = ", LONG_MAX);
Print("ULONG_MAX = ", ULONG_MAX);
// --- 浮動小数点型の最大値・最小値 ---
Print("=== 浮動小数点型の最大値・最小値 ===");
Print("DBL_MIN = ", DBL_MIN);
Print("DBL_MAX = ", DBL_MAX);
Print("DBL_EPSILON = ", DBL_EPSILON);
Print("DBL_DIG = ", DBL_DIG);
Print("FLT_MIN = ", FLT_MIN);
Print("FLT_MAX = ", FLT_MAX);
Print("FLT_EPSILON = ", FLT_EPSILON);
Print("FLT_DIG = ", FLT_DIG);
// --- オーバーフロー防止の例 ---
Print("=== オーバーフロー防止の例 ===");
int value = 2147483640;
int addValue = 100;
// 加算前にオーバーフローをチェック
if(value > INT_MAX - addValue)
{
Print("オーバーフローが発生するため加算しません");
Print("現在値: ", value, " / 加算値: ", addValue, " / INT_MAX: ", INT_MAX);
}
else
{
value = value + addValue;
Print("加算結果: ", value);
}
}
実行結果
上記プログラムを実行すると、エキスパートログに以下のような内容が出力されます。
=== 整数型の最大値・最小値 ===
CHAR_MIN = -128
CHAR_MAX = 127
UCHAR_MAX = 255
SHORT_MIN = -32768
SHORT_MAX = 32767
USHORT_MAX = 65535
INT_MIN = -2147483648
INT_MAX = 2147483647
UINT_MAX = 4294967295
LONG_MIN = -9223372036854775808
LONG_MAX = 9223372036854775807
ULONG_MAX = 18446744073709551615
=== 浮動小数点型の最大値・最小値 ===
DBL_MIN = 2.2250738585072014e-308
DBL_MAX = 1.7976931348623158e+308
DBL_EPSILON = 2.2204460492503131e-016
DBL_DIG = 15
FLT_MIN = 1.17549435e-038
FLT_MAX = 3.40282347e+038
FLT_EPSILON = 1.19209290e-007
FLT_DIG = 6
=== オーバーフロー防止の例 ===
オーバーフローが発生するため加算しません
現在値: 2147483640 / 加算値: 100 / INT_MAX: 2147483647
このように、最大値・最小値の定数を活用することで、オーバーフローを事前に検知し、プログラムの安全性を高めることができます。




