我正在为我的微积分课做一个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位小数?
感谢您的帮助。
答案 0 :(得分:7)
浮点基础知识:
http://en.wikipedia.org/wiki/Floating_point
您的案例0.10
中的答案在二进制浮点中并不完全可以表示。因此,它只能精确到大约16位数。但是你试图把它打印到50位小数。
答案 1 :(得分:1)
如果您需要double
可以提供的更准确的结果,那么您可能需要查看一些可用的arbitrary precision libraries。