Numeric limits
目次 |
整数型の制限
コア言語整数型の制限 |
|
|
ヘッダーで定義
<limits.h>
|
|
|
BOOL_WIDTH
(C23)
|
_Boolのビット幅
_Bool
(マクロ定数) |
|
CHAR_BIT
|
バイトのビット幅
(マクロ定数) |
|
MB_LEN_MAX
|
マルチバイト文字の最大バイト数
(マクロ定数) |
|
CHAR_WIDTH
(C23)
|
char
のビット幅、
CHAR_BIT
と同じ
(マクロ定数) |
|
CHAR_MIN
|
char
型の最小値
(マクロ定数) |
|
CHAR_MAX
|
char
型の最大値
(マクロ定数) |
|
SCHAR_WIDTH
SHRT_WIDTH
INT_WIDTH
LONG_WIDTH
LLONG_WIDTH
(C23)
(C23)
(C23)
(C23)
(C23)
|
それぞれ
signed
char
,
short
,
int
,
long
, および
long
long
のビット幅
(マクロ定数) |
|
SCHAR_MIN
SHRT_MIN
INT_MIN
LONG_MIN
LLONG_MIN
(C99)
|
それぞれ
signed
char
、
short
、
int
、
long
および
long
long
の最小値
(マクロ定数) |
|
SCHAR_MAX
SHRT_MAX
INT_MAX
LONG_MAX
LLONG_MAX
(C99)
|
それぞれ
signed
char
,
short
,
int
,
long
および
long
long
の最大値
(マクロ定数) |
|
UCHAR_WIDTH
USHRT_WIDTH
UINT_WIDTH
ULONG_WIDTH
ULLONG_WIDTH
(C23)
(C23)
(C23)
(C23)
(C23)
|
unsigned
char
,
unsigned
short
,
unsigned
int
,
unsigned
long
, および
unsigned
long
long
のビット幅
(マクロ定数) |
|
UCHAR_MAX
USHRT_MAX
UINT_MAX
ULONG_MAX
ULLONG_MAX
(C99)
|
unsigned
char
,
unsigned
short
,
unsigned
int
,
unsigned long および unsigned long long の最大値 (マクロ定数) |
|
BITINT_MAXWIDTH
(C23)
|
ビット精度整数の宣言でサポートされる最大幅
N
を表す型指定子
_BitInt
(
N
)
において、
ULLONG_WIDTH
以上の値
(マクロ定数) |
ライブラリ型エイリアスの制限 |
|
|
ヘッダーで定義
<stdint.h>
|
|
|
PTRDIFF_WIDTH
(C23)
|
ptrdiff_t型オブジェクトのビット幅
(マクロ定数) |
|
PTRDIFF_MIN
(C99)
|
ptrdiff_t
の最小値
(マクロ定数) |
|
PTRDIFF_MAX
(C99)
|
ptrdiff_t
の最大値
(マクロ定数) |
|
SIZE_WIDTH
(C23)
|
size_t
型のオブジェクトのビット幅
(マクロ定数) |
|
SIZE_MAX
(C99)
|
size_t
の最大値
(マクロ定数) |
|
SIG_ATOMIC_WIDTH
(C23)
|
sig_atomic_t
型のオブジェクトのビット幅
(マクロ定数) |
|
SIG_ATOMIC_MIN
(C99)
|
sig_atomic_t
の最小値
(マクロ定数) |
|
SIG_ATOMIC_MAX
(C99)
|
sig_atomic_t
の最大値
(マクロ定数) |
|
WINT_WIDTH
(C23)
|
wint_t型オブジェクトのビット幅
(マクロ定数) |
|
WINT_MIN
(C99)
|
wint_tの最小値
wint_t
(マクロ定数) |
|
WINT_MAX
(C99)
|
wint_t
の最大値
(マクロ定数) |
|
ヘッダーで定義
<wchar.h>
|
|
|
ヘッダーで定義
<stdint.h>
|
|
|
WCHAR_WIDTH
(C23)
|
wchar_t
型のオブジェクトのビット幅
(マクロ定数) |
|
WCHAR_MIN
(C99)
|
wchar_t
の最小値
(マクロ定数) |
|
WCHAR_MAX
(C99)
|
wchar_tの最大値
wchar_t
(マクロ定数) |
注記
これらの定数の型は、
CHAR_BIT
および
MB_LEN_MAX
を除き、それらが記述する型のオブジェクトに適用される
整数プロモーション
の結果と一致することが要求されます:
CHAR_MAX
は
int
型または
unsigned
int
型を持つ可能性がありますが、
char
型になることはありません。同様に、
USHRT_MAX
は符号なし型にはならず、その型は
int
型である可能性があります。
フリースタンディング実装では、
sig_atomic_t
および/または
wint_t
のtypedef名が存在しない場合があり、その場合
SIG_ATOMIC_*
および/または
WINT_*
マクロは対応して存在しません。
例
#include <limits.h> #include <stdint.h> #include <stdio.h> int main(void) { printf("CHAR_BIT = %d\n", CHAR_BIT); printf("MB_LEN_MAX = %d\n\n", MB_LEN_MAX); printf("CHAR_MIN = %+d\n", CHAR_MIN); printf("CHAR_MAX = %+d\n", CHAR_MAX); printf("SCHAR_MIN = %+d\n", SCHAR_MIN); printf("SCHAR_MAX = %+d\n", SCHAR_MAX); printf("UCHAR_MAX = %u\n\n", UCHAR_MAX); printf("SHRT_MIN = %+d\n", SHRT_MIN); printf("SHRT_MAX = %+d\n", SHRT_MAX); printf("USHRT_MAX = %u\n\n", USHRT_MAX); printf("INT_MIN = %+d\n", INT_MIN); printf("INT_MAX = %+d\n", INT_MAX); printf("UINT_MAX = %u\n\n", UINT_MAX); printf("LONG_MIN = %+ld\n", LONG_MIN); printf("LONG_MAX = %+ld\n", LONG_MAX); printf("ULONG_MAX = %lu\n\n", ULONG_MAX); printf("LLONG_MIN = %+lld\n", LLONG_MIN); printf("LLONG_MAX = %+lld\n", LLONG_MAX); printf("ULLONG_MAX = %llu\n\n", ULLONG_MAX); printf("PTRDIFF_MIN = %td\n", PTRDIFF_MIN); printf("PTRDIFF_MAX = %+td\n", PTRDIFF_MAX); printf("SIZE_MAX = %zu\n", SIZE_MAX); printf("SIG_ATOMIC_MIN = %+jd\n",(intmax_t)SIG_ATOMIC_MIN); printf("SIG_ATOMIC_MAX = %+jd\n",(intmax_t)SIG_ATOMIC_MAX); printf("WCHAR_MIN = %+jd\n",(intmax_t)WCHAR_MIN); printf("WCHAR_MAX = %+jd\n",(intmax_t)WCHAR_MAX); printf("WINT_MIN = %jd\n", (intmax_t)WINT_MIN); printf("WINT_MAX = %jd\n", (intmax_t)WINT_MAX); }
出力例:
CHAR_BIT = 8 MB_LEN_MAX = 16 CHAR_MIN = -128 CHAR_MAX = +127 SCHAR_MIN = -128 SCHAR_MAX = +127 UCHAR_MAX = 255 SHRT_MIN = -32768 SHRT_MAX = +32767 USHRT_MAX = 65535 INT_MIN = -2147483648 INT_MAX = +2147483647 UINT_MAX = 4294967295 LONG_MIN = -9223372036854775808 LONG_MAX = +9223372036854775807 ULONG_MAX = 18446744073709551615 LLONG_MIN = -9223372036854775808 LLONG_MAX = +9223372036854775807 ULLONG_MAX = 18446744073709551615 PTRDIFF_MIN = -9223372036854775808 PTRDIFF_MAX = +9223372036854775807 SIZE_MAX = 18446744073709551615 SIG_ATOMIC_MIN = -2147483648 SIG_ATOMIC_MAX = +2147483647 WCHAR_MIN = -2147483648 WCHAR_MAX = +2147483647 WINT_MIN = 0 WINT_MAX = 4294967295
浮動小数点型の制限
|
ヘッダーで定義
<float.h>
|
|
|
FLT_RADIX
|
すべての浮動小数点型の表現で使用される基数(整数の底)
(マクロ定数) |
|
DECIMAL_DIG
(C99)
|
long
double
から10進数への変換と、少なくとも
DECIMAL_DIG
桁で
long
double
への逆変換は恒等変換となる:これは
long
double
をシリアライズ/デシリアライズするために必要な10進精度である
(マクロ定数) |
|
FLT_DECIMAL_DIG
DBL_DECIMAL_DIG
LDBL_DECIMAL_DIG
(C11)
|
float
/
double
/
long
double
から10進数への変換とその逆変換が恒等変換となる最小桁数:
FLT_DECIMAL_DIG
/
DBL_DECIMAL_DIG
/
LDBL_DECIMAL_DIG
桁。これは浮動小数点値をシリアライズ/デシリアライズするために必要な10進精度である。それぞれ少なくとも
6
,
10
,
10
と定義され、IEEE floatでは
9
、IEEE doubleでは
17
となる(C++の対応物:
max_digits10
も参照)
(マクロ定数) |
|
FLT_MIN
DBL_MIN
LDBL_MIN
|
float
、
double
および
long
double
の正規化された最小正の値
(マクロ定数) |
|
FLT_TRUE_MIN
DBL_TRUE_MIN
LDBL_TRUE_MIN
(C11)
|
float、double、long doubleの
それぞれの最小正の値
(マクロ定数) |
|
FLT_MAX
DBL_MAX
LDBL_MAX
|
float
、
double
および
long
double
の有限最大値
(マクロ定数) |
|
FLT_EPSILON
DBL_EPSILON
LDBL_EPSILON
|
1.0
と
float
、
double
、
long
double
それぞれの次に表現可能な値との絶対値差
(マクロ定数) |
|
FLT_DIG
DBL_DIG
LDBL_DIG
|
テキスト →
float
/
double
/
long
double
→ テキストの往復変換において、丸めやオーバーフローによる変更なしに保証される10進桁数(詳細はC++の対応機能
digits10
を参照)
(マクロ定数) |
|
FLT_MANT_DIG
DBL_MANT_DIG
LDBL_MANT_DIG
|
浮動小数点仮数部に含まれる基数
FLT_RADIX
の桁数であり、それぞれ
float
、
double
および
long
double
について精度を失わずに表現可能な桁数
(マクロ定数) |
|
FLT_MIN_EXP
DBL_MIN_EXP
LDBL_MIN_EXP
|
最小の負の整数であり、
FLT_RADIX
をその整数より1少ない数で累乗した値が正規化された
float
、
double
および
long
double
それぞれとなる
(マクロ定数) |
|
FLT_MIN_10_EXP
DBL_MIN_10_EXP
LDBL_MIN_10_EXP
|
10のそのべき乗が正規化された
float
、
double
および
long
double
となる最小の負の整数
(マクロ定数) |
|
FLT_MAX_EXP
DBL_MAX_EXP
LDBL_MAX_EXP
|
その整数から1を引いた値を指数とする
FLT_RADIX
の累乗が有限の表現可能な
float
、
double
および
long
double
それぞれとなる最大の正の整数
(マクロ定数) |
|
FLT_MAX_10_EXP
DBL_MAX_10_EXP
LDBL_MAX_10_EXP
|
10のその乗数が表現可能な有限の
float
、
double
および
long
double
それぞれとなる最大の正の整数
(マクロ定数) |
|
浮動小数点演算の丸めモード
(マクロ定数) |
|
|
(C99)
|
すべての算術演算が実行される精度を指定する
(マクロ定数) |
|
FLT_HAS_SUBNORM
DBL_HAS_SUBNORM
LDBL_HAS_SUBNORM
(C11)
(C23で非推奨)
|
その型がsubnormal(
非正規化数
)をサポートするかどうか:
- 1 – 判定不能、 0 – 存在しない、 1 – 存在する (マクロ定数) |
例
#include <float.h> #include <math.h> #include <stdio.h> int main(void) { printf("DECIMAL_DIG = %d\n", DECIMAL_DIG); printf("FLT_DECIMAL_DIG = %d\n", FLT_DECIMAL_DIG); printf("FLT_RADIX = %d\n", FLT_RADIX); printf("FLT_MIN = %e\n", FLT_MIN); printf("FLT_MAX = %e\n", FLT_MAX); printf("FLT_EPSILON = %e\n", FLT_EPSILON); printf("FLT_DIG = %d\n", FLT_DIG); printf("FLT_MANT_DIG = %d\n", FLT_MANT_DIG); printf("FLT_MIN_EXP = %d\n", FLT_MIN_EXP); printf("FLT_MIN_10_EXP = %d\n", FLT_MIN_10_EXP); printf("FLT_MAX_EXP = %d\n", FLT_MAX_EXP); printf("FLT_MAX_10_EXP = %d\n", FLT_MAX_10_EXP); printf("FLT_ROUNDS = %d\n", FLT_ROUNDS); printf("FLT_EVAL_METHOD = %d\n", FLT_EVAL_METHOD); printf("FLT_HAS_SUBNORM = %d\n", FLT_HAS_SUBNORM); }
出力例:
DECIMAL_DIG = 37 FLT_DECIMAL_DIG = 9 FLT_RADIX = 2 FLT_MIN = 1.175494e-38 FLT_MAX = 3.402823e+38 FLT_EPSILON = 1.192093e-07 FLT_DIG = 6 FLT_MANT_DIG = 24 FLT_MIN_EXP = -125 FLT_MIN_10_EXP = -37 FLT_MAX_EXP = 128 FLT_MAX_10_EXP = 38 FLT_ROUNDS = 1 FLT_EVAL_METHOD = 1 FLT_HAS_SUBNORM = 1
参考文献
- C23規格 (ISO/IEC 9899:2024):
-
- 5.2.4.2 数値限界 (p: TBD)
-
- 7.22.3 その他の整数型の限界 (p: TBD)
- C17規格 (ISO/IEC 9899:2018):
-
- 5.2.4.2 数値限界 (p: 20-27)
-
- 7.20.3 その他の整数型の限界 (p: 215-216)
- C11規格 (ISO/IEC 9899:2011):
-
- 5.2.4.2 数値限界 (p: 26-34)
-
- 7.20.3 その他の整数型の限界 (p: 293-294)
- C99標準 (ISO/IEC 9899:1999):
-
- 5.2.4.2 数値限界 (p: 21-28)
-
- 7.18.3 その他の整数型の限界 (p: 259-260)
- C89/C90標準 (ISO/IEC 9899:1990):
-
- 2.2.4.2 数値限界
関連項目
|
C++ ドキュメント
for
C 数値制限インターフェース
|