少なくともstd::numeric_limits::is_iec559 (IEEE 754) が true の場合 ( std::numeric_limits::has_infinityも true であることを保証します)、既に述べた方法で正と負の無限値を表現できます。
ウィキペディアからの IEEE 754-1985 無限値の簡単な説明:
......をちょきちょきと切る......
バイアス指数フィールドは、無限大または計算の無効な結果を示すために、すべて 1 のビットで埋められます。
正と負の無限大
正と負の無限大は次のように表されます。
sign = 0 for positive infinity, 1 for negative infinity.
biased exponent = all 1 bits.
fraction = all 0 bits.
......をちょきちょきと切る......
アサーション
次の例は、期待どおりに動作するか、ターゲット プラットフォームが IEEE 754 浮動小数点数をサポートしていない場合にコンパイル時エラーを引き起こします。
#include <cstdlib>
#include <cmath>
#include <cassert>
#include <limits>
int main(void)
{
//Asserts floating point compatibility at compile time
static_assert(std::numeric_limits<float>::is_iec559, "IEEE 754 required");
//C99
float negative_infinity1 = -INFINITY;
float negative_infinity2 = -1 * INFINITY;
float negative_infinity3 = -std::numeric_limits<float>::infinity();
float negative_infinity4 = -1 * std::numeric_limits<float>::infinity();
assert(std::isinf(negative_infinity1) && negative_infinity1 < std::numeric_limits<float>::lowest());
assert(std::isinf(negative_infinity2) && negative_infinity2 < std::numeric_limits<float>::lowest());
assert(std::isinf(negative_infinity3) && negative_infinity3 < std::numeric_limits<float>::lowest());
assert(std::isinf(negative_infinity4) && negative_infinity4 < std::numeric_limits<float>::lowest());
return EXIT_SUCCESS;
}