私はC++でintをInfinityに設定するを読んでいました。真の無限大が必要なときは、numeric_limits<float>::infinity()
;を使用することになっていることを理解しています。その背後にある理論的根拠は、通常、整数型には、IEEE 754フロートのようにNaN、Infなどの特別な状態を表すために指定された値がないことだと思います(ここでも、C ++はどちらも義務付けていません- int
&float
使用は実装に任されています)。しかし、それでもmax > infinity
、特定のタイプについては誤解を招く可能性があります。私は、標準でこの呼び出しの背後にある理論的根拠を理解しようとしています。infinity
あるタイプに意味がない場合は、フラグの有効性をチェックする代わりに、それを禁止するべきではありませんか?
4 に答える
この関数は、を 返す 関数numeric_limits<T>::infinity()
にとって意味があります。T
numeric_limits<T>::has_infinity
true
の場合はT=int
、を返しますfalse
。比較する意味のある値をnumeric_limits<int>::infinity()
返さないため、比較は意味がありません。
たとえば、このリファレンスを読むと、整数型の無限大がゼロであることを示す表が表示されます。これは、C++の整数型は定義上無限にできないためです。
逆に、標準が無実を表すために何らかの値を予約していたと仮定しnumeric_limits<int>::infinity() > numeric_limits<int>::max()
ます。つまり、の値が、int
よりも大きいmax()
、つまり、int
の表現可能な値がintの最大の表現可能な値よりも大きいということです。
明らかに、規格がどのように指定しても、自然な理解に違反しています。、またはのようなxinifinity() <= max()
が存在しint(x) > max()
ます。規格は、違反する自然の規則を選択する必要があります。
彼らは賢明に選んだと思います。
numeric_limits<int>::infinity()
可能な場合は、正の無限大の表現を返します。
整数の場合、正の無限大は存在しません。
cout << "int has infinity: " << numeric_limits<int>::has_infinity << endl;
プリント
int has infinity: false