C++ で負の無限大を定義して使用する
この記事では、C++ で負の無限大を表現する際の問題について説明し、考えられる解決策をいくつか示します。
C++ は IEEE-754 標準を使用して浮動小数点数を表します。 浮動小数点データ型には、float
、double
、および long double
の 3つがあります。
これらの変数型はすべて、int
データ型では格納できない数値を格納できます。
無限大は C++ では inf
と記述され、正の数値を null 値で除算するか、64 ビットに格納できる数値よりも大きい数値を計算することになります。
符号なしまたは正の浮動無限値は、cmath
や limits
などのさまざまな C++ ライブラリで定義されていますが、C++ には負の無限大の標準はありません。
C++ で負の無限大を表現する標準的な方法がないため、C++ で負の無限大を表現して使用するための信頼できる方法をいくつか紹介します。
C++ で numeric_limits::infinity()
の負の積を使用する
C++ で limits
ライブラリを使用します。
#include <iostream>
#include <limits>
using namespace std;
int main() {
float f = numeric_limits<float>::infinity();
float negInf = f * -1;
cout << "The value of f is = " << f << endl;
cout << "The value of negInf is = " << negInf << endl;
cout << "The value of f + negInf is = " << f + negInf << endl;
return 0;
}
上記のコード スニペットでは、limits
ライブラリの infinity
メソッドが正の無限大の値を返します。
構文は次のとおりです。
numeric_limits<T>::infinity()
上記の定義では、山括弧内の T
はテンプレート クラスを表し、実際の実装では、numeric_limits
メソッドを使用するデータ型に置き換えられます。 上記のコード スニペットでは、float
データ型が使用されていますが、double
も同様に使用できます。
ただし、int
や bool
などの整数データ型は本質的に有限であるため、infinity()
メソッドは非整数データ型に対してのみ有効です。
上記のコードの出力は次のとおりです。
The value of f is = inf
The value of negInf is = -inf
The value of f + negInf is = nan
上記の例に見られるように、infinity()
メソッドを使用して、正の無限大の値が float
型変数 f
に代入されます。 次に、f
に -1 を掛けるという非常に単純で直感的なアプローチが使用され、その結果が negInf
という名前の変数に格納されます。これにより、負の無限大の値が negInf
に格納されます。
上記の出力に見られるように、この有効なメソッドは変数に負の無限値を代入します。 このメソッドをさらにテストするために、f
と negInf
を一緒に追加すると、Not-a-Number
を表し、計算できない値を示す nan
が返されます。
この結果は、無限値に関する IEEE-754 規則と一致するため、計算上安全です。
cmath
ライブラリの INFINITY
定義を使用する
cmath
ライブラリは、一般的な数学演算と変換を処理するための多くの便利なメソッドと関数を備えた別の C++ ライブラリです。
このライブラリには、INFINITY
という名前の無限値の定義も含まれており、numeric_limits<T>::infinity()
とほぼ同じ方法で使用でき、float
と の両方に直接割り当てることができます。 double
データ型。
前の例と同じ方法を使用して、符号なしまたは正の無限大の値に負の値を掛けると、負の無限大の値が返されます。
#include <cmath>
#include <iostream>
using namespace std;
int main() {
long double f = INFINITY;
long double negInf = f * -1;
cout << "The value of f is = " << f << endl;
cout << "The value of negInf is = " << negInf << endl;
cout << "The value of f + negInf is = " << f + negInf << endl;
return 0;
}
上記のコードの出力は次のとおりです。
The value of f is = inf
The value of negInf is = -inf
The value of f + negInf is = nan
ご覧のとおり、どちらのメソッドも同じ出力を生成し、C++ で負の無限大を実装するために安全に使用できます。