龙空技术网

C语言浮点数精度问题

大懒水母 160

前言:

此时同学们对“c语言双精度浮点数的输入输出”可能比较着重,我们都需要知道一些“c语言双精度浮点数的输入输出”的相关资讯。那么小编在网摘上收集了一些有关“c语言双精度浮点数的输入输出””的相关文章,希望兄弟们能喜欢,咱们快快来学习一下吧!

1+1=2,2-1=1?

数学中1+1=2,那2-1=1,这个是我们大家都明白的道理。但在我们C语言中,给定一个数,加上1,再减去所给定的数,结果是多少?我们就来看看。

程序示例

#include<stdio.h>int main(void){    float a,b;    b = 2.0e20 + 1.0;    a = b - 2.0e20;    printf("%f \n",a);    return 0;}

程序输出结果:

4008175468544.000000

这个是基于Dev C++编译后的结果。

那为什么会出现这样的结果?

在程序示例中2.0e20相当于2.0 * 1020,这个数值非常的大。我们定义的是float的数据类型,我们定义的这个数值已经超过float能够存储的有效数字,在这样的情况下,计算结果就存在错误。简单总结下:计算机缺少足够的小数位来完成正确的运算。

另一种情况,我们把2.0e20改为2.0e5,这个时候,计算结果就不会存在问题

#include<stdio.h>int main(void){    float a,b;    b = 2.0e5 + 1.0;    a = b - 2.0e5;    printf("%f \n",a);    return 0;}

程序输出结果:

1.000000

这个时候float就有足够的精度进行运算。

标签: #c语言双精度浮点数的输入输出 #c语言中浮点