c - C 中的 double - 打印 50 位有效数字会产生不准确的值

标签 c double division

我正在为我的微积分类(class)使用黎曼求和进行积分程序。我决定在计算积分时使用 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 位?

感谢您的帮助。

最佳答案

浮点基础知识:

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

您的情况的答案0.10不能完全用二进制浮点表示。因此,它只能精确到 16 位左右。然而您正试图将其打印到小数点后 50 位。

关于c - C 中的 double - 打印 50 位有效数字会产生不准确的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21101987/

相关文章:

java - java中两个双数之和是无穷大

c - 当尝试除两个 float 时,Xcode 会自动转到 lldb

division - 检查一个数是否能被3整除

python - 为什么 Python 3.4 给出了大数除法的错误答案,我该如何测试整除性?

c - free() 释放的内存中的数据会怎样?

c - 将通用字符名称转义为C中的相应字符

python - Python 中 double 转换为十进制值 IEEE-754

c - c 中带有 double 的函数有不同的语法吗?

c - 将指针数组传递给 GTK 相关函数

c - 在 Solaris Sparc 64 位上,64 位进程可以加载 32 位共享库吗