作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我在转换“普通” double 值时没有问题,但我无法转换 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))
最佳答案
会不会是 DBL_MAX
的实际值不能用小数点后 16 位的指数表示法精确表示(假设小数值非常小大于基于两个表示),但是使用 DBL_MAX
初始化 double
仍然会设置正确的值(由于四舍五入)。 std::istringstream
可能有点挑剔。
编辑: 实际上,我发现我的编译器中 DBL_MAX
的值为 1.7976931348623158e+308,这对我来说很好用。您的数字四舍五入且稍大,因此失败。
EDIT2: DBL_MAX
的十进制形式的精确值由 (2 ^ (1023 - 52)) * (2 ^ 53 - 1) 给出
不能用小数点后 16 位表示。
关于c++ - 如何将字符串(包含双最大值)转换为 double ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1939284/
我是一名优秀的程序员,十分优秀!