C - 印刷中的双精度50个有效数字会产生不准确的值

时间:2011-10-19 04:21:21

标签: c double division

我正在为我的微积分课做一个Riemann总和的集成程序。我决定在计算积分时使用C,我注意到我的程序中出现了一个很大的错误,这个错误源于这个问题。

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int main(int argc, char** argv) {

double x = 2.0/20.0;
printf("%1.50f \n", x);


return (EXIT_SUCCESS);
}    

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

感谢您的帮助。

2 个答案:

答案 0 :(得分:7)

浮点基础知识:

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

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

答案 1 :(得分:1)

如果您需要double可以提供的更准确的结果,那么您可能需要查看一些可用的arbitrary precision libraries