为什么乘以两个大的双数会得到错误的结果?

f1z*_*_13 -1 c++ double

此双倍乘(双)1000000007*(双)11111111的输出应以7结尾(或精确等于11111111077777777).但是我编写的这段代码输出的结果以6结尾(或者准确地说等于11111111077777776).我无法弄清楚我可能做错了什么.任何帮助都会很棒.

#include <iostream>
#include <iomanip>

using namespace std;

int main()
{
    cout << setprecision(40) << (double)1000000007 * (double)11111111;
}
Run Code Online (Sandbox Code Playgroud)

Ree*_*sey 7

当您使用double值进行乘法时,结果并不精确.有一个固有的精度double,虽然相当准确,但不够精确,无法准确地代表您的价值.

我建议阅读每个计算机科学家应该知道的关于浮点运算的内容.