2013-01-10 37 views
-1

此双倍(双)1000000007 *(双)11111111的输出应以7结尾(或等于11111111077777777为准确)。但是我写的这段代码输出了以6结尾的结果(或者等于11111111077777776)。我无法弄清楚我可能会做错什么。任何帮助都会很棒。为什么乘两个大的双数会给出错误的结果?

#include <iostream> 
#include <iomanip> 

using namespace std; 

int main() 
{ 
    cout << setprecision(40) << (double)1000000007 * (double)11111111; 
} 

回答

7

当您使用double值进行乘法运算时,结果不准确。 double有一个固有的精度,它虽然相当准确,但不够精确,无法准确表示您的价值。

我推荐阅读What Every Computer Scientist Should Know About Floating-Point Arithmetic

+1

+1 - 这是我最喜欢的论文之一 – LittleBobbyTables

+1

准确地说,乘以两个“双”是非常准确的,它只是不准确*。 (你总是可以得到相同的答案,并且可以事先确定,但如果你的双倍智力模型是一个真实的数字,它不会是“正确的”) – Yakk

+0

感谢您的帮助! :) –

1

你没有做错什么。它与双打的实施有关。如果您需要的准确性超出了双打的实施范围,那么肯定有可用于“大数”操作的库。

相关问题