Namespaces
Variants

HUGE_VALF, HUGE_VAL, HUGE_VALL

From cppreference.net
Common mathematical functions
Nearest integer floating point operations
(C++11)
(C++11)
(C++11) (C++11) (C++11)
Floating point manipulation functions
(C++11) (C++11)
(C++11)
(C++11)
Classification and comparison
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
Types
(C++11)
(C++11)
(C++11)
Macro constants
HUGE_VALF HUGE_VAL HUGE_VALL
(C++11) (C++11)
(C++11)
(C++11)
ヘッダー <cmath> で定義
#define HUGE_VALF /* implementation defined */
(C++11以降)
#define HUGE_VAL  /* implementation defined */
#define HUGE_VALL /* implementation defined */
(C++11以降)

マクロ HUGE_VALF HUGE_VAL および HUGE_VALL は、オーバーフローが発生した場合に浮動小数点関数および演算子が返す値と等しい比較結果となる正の浮動小数点定数式に展開されます( math_errhandling を参照)。

定数 説明
HUGE_VALF オーバーフローを示す正の float 式に展開される
HUGE_VAL オーバーフローを示す正の double 式に展開される。 float として表現可能とは限らない
HUGE_VALL オーバーフローを示す正の long double 式に展開される。 float または double として表現可能とは限らない

浮動小数点の無限大をサポートする実装では、これらのマクロは常にそれぞれ float double 、および long double の正の無限大に展開されます。

注記

浮動小数点の無限大をサポートしない実装では、これらのマクロはそれぞれの型の最大有限数に展開されます。

C++98は数学関数の float および long double オーバーロードを追加しました。問題点として、 float オーバーロードはオーバーフローを示すために HUGE_VAL を返すことができません。なぜならこのマクロは float として表現可能であることが保証されていないためです。

LWG issue 357 はこの問題を対象として提起されました。LWGはC99も同じ問題を抱えていること( float および long double オーバーロードもC99で追加されました)を確認し、C99がこの問題を解決するために新しいマクロ HUGE_VALF および HUGE_VALL を導入したことを発見しました。そのため、このissueはクローズされ、C++11ではC99の解決策が採用されました。

関連項目

(C++11)
正の無限大または float のオーバーフローが保証される値に評価される
(マクロ定数)