gnu c ++浮点数精度

260*_*607 0 c++

我有关于浮点数的简单问题,

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的范围内,但是,值完全不同.我想知道我在这里做错了什么?

谢谢.

Pau*_*l R 5

一个只有15.95的精度小数位数.您已经超过了值的整数部分中的这个位数,因此最后几位的精度损失,小数点后缺少任何有用的数字.

您应该先看看这个:http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html,然后再进行浮点值处理.

  • @ 2607:你正在混淆浮点类型的*range*及其*precision* - 它们是两个完全不同的东西. (2认同)