double x;
cin>>x;
if( x > 1.7976931348623157e+308 || x < -1.7976931348623157e+308 )
{
cout<<"value not in range"<<endl;
exit(1);
}
DOUBLE_MAX や DOUBLE_MIN のようなものはありますか? ヘッダー ファイルを含める必要がありますか?
ヘッダー<cfloat>
はCヘッダーと同等であり、他にも多くのもの<float.h>
が含まれDBL_MIN
ています。DBL_MAX
整数制限(<limits.h>
C)はで保持され<climits>
ます。
これは、C++0xドラフトの18.3.2で詳しく説明されています。しかし、他の場所で指摘されているように、doubleはこの範囲外の値を保持することはできません。long doubleなどの「より大きな」タイプを使用する必要があります(ただし、標準によれば、doubleと同じサイズになる可能性があるため、必ずしも役立つとは限りません)。
これがあなたの楽しみのための完全なサンプルプログラムです:-)
#include <iostream>
#include <cfloat>
int main (void) {
long double bignum;
std::cout << "Enter number: ";
std::cin >> bignum;
if ((bignum > (long double)DBL_MAX) || (bignum < (long double)DBL_MIN)) {
std::cout << "Value not in range" << std::endl;
} else {
double x = bignum;
std::cout << "Number was " << x << std::endl;
}
return 0;
}
トランスクリプトを伴う:
$ ./qq.exe
Enter number: 1.7976931348623157e+308
Number was 1.79769e+308
$ ./qq.exe
Enter number: 1.7976931348623158e+308
Value not in range
最大および最小の double 型には定数がありますが、x
は double 型であるため、x をこれらの値よりも大きくしたり小さくしたりすることはできません! 入力値をこれらの制限と比較したい場合は、文字列を自分で解析してオーバーフローをチェックする必要があります。