4

C++ では、問題なく denorm 数を変数に格納できます。

double x = std::numeric_limits<double>::denorm_min();

次に、この変数を問題なく出力できます。

std::cout<<std::setprecision(std::numeric_limits<double>::max_digits10)
std::cout<<std::scientific;
std::cout<<x;
std::cout<<std::endl;

そして、それは印刷されます:

4.94065645841246544e-324

しかし、この数値を解析しようとすると問題が発生します。この数値がファイル内に保存され、文字列として読み取られると想像してください。問題はそれです:

std::string str = "4.94065645841246544e-324";
double x = std::stod(str);

例外をスローしstd::out_of_rangeます。

私の質問は次のとおりです。文字列に格納されたデノルム値を変換する方法は?

4

4 に答える 4

2

問題を理解しているかどうかはわかりませんが、次のstd::istringstreamように使用します。

std::string str = "4.94065645841246544e-324";
double x;
std::istringstream iss(str);
iss >> x;
std::cout << std::setprecision(std::numeric_limits<double>::max_digits10);
std::cout << std::scientific;
std::cout << x << std::endl;

...私に与えます:

4.94065645841246544e-324
于 2013-10-28T02:50:18.570 に答える
0

strtodどうやら、 の(または古いatof) インターフェースを使用できるようですcstdlib。これが保証されているか、移植可能かどうかは疑問です。

于 2013-10-28T02:59:32.220 に答える