转换“普通”双值没有问题,但我无法转换numeric_limits<double>::max(
)或DBL_MAX
字符串表示形式?
std::string max = "1.79769313486232e+308";
std::istringstream stream(max);
double value;
// enters here, failbit is set
if (!(stream >> value))
答案 0 :(得分:10)
可能是DBL_MAX
的实际值在16位小数位的指数表示法中无法准确表示(假设小数值非常小于大于两个基于的表示但是,使用double
初始化DBL_MAX
仍然会设置正确的值(由于四舍五入)。 std::istringstream
可能会更加挑剔。
编辑:实际上我发现编译器中DBL_MAX
的值是1.7976931348623158e + 308,这对我来说很好。你的数字是四舍五入的,因此失败了。
EDIT2: DBL_MAX
的十进制格式的确切值由(2 ^ (1023 - 52)) * (2 ^ 53 - 1)
给出,不能用16位小数表示。
答案 1 :(得分:1)
如果您使用
double v = 1.79769313486232e+308;
cout << v << endl;
它会给你inf。这意味着现在的文字数实际上超过了两倍。