C – 打印的双精度50个有效数字会产生不准确的值

我正在为我的微积分课做Riemann总和的整合程序。 我决定在计算积分时使用C,并且我注意到我的程序中存在一个巨大的错误,这个错误来自于这个问题。

#include  #include  #include  int main(int argc, char** argv) { double x = 2.0/20.0; printf("%1.50f \n", x); return (EXIT_SUCCESS); } 

该程序给了我:0.10000000000000000555111512312578270211815834045410。 我的问题:为什么会这样? 我该如何解决这个问题? 或者至少四舍五入到小数点后15位?

谢谢您的帮助。

浮点基础知识:

http://en.wikipedia.org/wiki/Floating_point

在您的情况下,答案0.10在二进制浮点中不能完全表示。 因此,它只能精确到大约16位数。 但是你试图将它打印到50位小数。

如果你需要更精确的结果,那么你可能需要查看一些可用的任意精度库 。