17

double問題は、データ型のC++で無限大をモデル化することです。ヘッダーファイルで必要なので、のような関数は使用できませんnumeric_limits

最大値を表す定義済みの定数はありますか?

4

9 に答える 9

26

浮動小数点数(doubleなど)は、実際には正と負の無限大を保持できます。定数INFINITYはmath.hヘッダーにある必要があります。

標準的なダイビングに行き、テキストを見つけました:

4マクロINFINITYは、可能であれば、正または符号なしの無限大を表すfloat型の定数式に展開されます。それ以外の場合は、変換時にオーバーフローするfloat型の正の定数になります。

セクションで7.12 Mathematics <math.h>


そしてもちろんisinf、無限大をテストするためのヘルパー関数があります(これもmath.hにあります)。

7.12.3.3isinfマクロ

int isinf(real-floating x);

説明:isinfマクロは、引数値が無限大(正または負)であるかどうかを判別します。まず、セマンティックタイプよりも広い形式で表された引数がセマンティックタイプに変換されます。次に、引数のタイプに基づいて決定が行われます。

戻り値:isinfマクロは、引数に無限の値がある場合にのみ、ゼロ以外の値を返します。

于 2011-12-27T02:44:57.810 に答える
21

numeric_limits関数はすべてconstexprであるため、コンパイル時定数として問題なく機能します(現在のバージョンのC ++を使用していると仮定します)。したがってstd::numeric_limits<double>::infinity()、どのような状況でも機能するはずです。

古いバージョンを使用している場合でも、コンパイル時定数を必要としない場所であればどこでも機能します。あなたの使用が本当にコンパイル時定数を必要とするかどうかはあなたの質問からは明らかではありません。ヘッダーにあるだけでは必ずしも必要ではありません。

古いバージョンを使用していて、コンパイル時定数が本当に必要な場合はINFINITY、cmathのマクロが機能するはずです。これは実際にはfloat無限大の値ですが、に変換できますdouble

于 2011-12-27T03:39:49.167 に答える
9

ヘッダーファイルでstd::numeric_limitsを使用できない理由がわかりません。しかし、これはANSICから引き継がれたものでもあります。

#include <cfloat>

DBL_MAX
于 2011-12-27T02:48:25.727 に答える
1

答えは「42.0」だと思いました;)

この記事は興味深いかもしれません:

http://www.cygnus-software.com/papers/comparingfloats/comparingfloats.htm

またはこれ:

http://www.cplusplus.com/reference/clibrary/cfloat/

MAXimum最大の有限表現可能な浮動小数点数:

FLT_MAX  1E+37
DBL_MAX  1E+37
LDBL_MAX 1E+37  
于 2011-12-27T02:46:20.583 に答える
1

おそらく、お使いのC ++環境では、 http://www.gamedev.net/topic/392211-max-value-for-double-/(DBL_MAX)float.hを参照してください。

于 2011-12-27T02:48:35.023 に答える
1

ウィキペディアから:

0x 7ff0 0000 0000 0000   = Infinity
0x fff0 0000 0000 0000   = −Infinity
于 2011-12-27T02:52:05.827 に答える
1

DBL_MAXを使用できます。これはfloat.hに次のようにあります

    #define DBL_MAX         1.7976931348623158e+308 /* max value */
于 2011-12-27T05:09:06.793 に答える
0
#include <cmath>
...
double d = INFINITY;

あなたは( )INFINITYで定義されているのを見つけることができます:<cmath>math.h

float可能な場合は、正または符号なしの無限大を表す型の定数式。floatそれ以外の場合は、変換時にオーバーフローする型の正の定数。

于 2011-12-27T02:50:41.047 に答える
-1

これはうまくいきませんか?

const double infinity =  1.0/0.0;
于 2011-12-27T02:47:34.090 に答える