我有关于浮点数的简单问题,
double temp;
std::cout.precision(std::numeric_limits<double>::digits10);
temp = 12345678901234567890.1234567890;
std::cout << (temp < std::numeric_limits<double>::max()) << std::endl;
std::cout << std::fixed << std::endl;
std::cout << temp << std::endl;
Run Code Online (Sandbox Code Playgroud)
但是,我得到的输出是这样的,
1
12345678901234567168.000000000000000
Run Code Online (Sandbox Code Playgroud)
temp的值仍然在double的范围内,但是,值完全不同.我想知道我在这里做错了什么?
谢谢.
一个双只有15.95的精度小数位数.您已经超过了值的整数部分中的这个位数,因此最后几位的精度损失,小数点后缺少任何有用的数字.
您应该先看看这个:http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html,然后再进行浮点值处理.
| 归档时间: |
|
| 查看次数: |
268 次 |
| 最近记录: |