【C语言】 浮点数精度丢失

浮点型变量

         浮点型变量分为单精度(float)型,双精度(double)型和长双精度(long double)型,三类。

浮点数精度丢失  

比如我们赋值给a=1.23456789e10,加10后,应该得到的值是1.234567891e10

#include<stdio.h>
int main() {
	float a,b;
	a = 1.23456789e10;
	b = a + 10;
	printf("%f",b);
	return 0;
}

但结果却如下图所示

我们称这种现象为精度丢失,因为float能够表示的有效数字为7位,最多只能保证1.234567e10的准确性,想要使结果正确,可以把float改成double。

                                        

    浮点数的数值范围与有效数字
类型位数数值范围有效数字
float3210^-37~10^386~7位
double6410^-307~10^30815~16位
long double12810^-4931~10^493218~19位

浮点数的判断

        直接上代码

#include<stdio.h>
int main() {
	float f;
	f = 1.456;
	if (f == 1.456) {
		printf("f is 1.456\n");
	}
	else {
		printf("f is not 1.456\n");
	}
	return 0;
}

        结果当然是“f is not 1.456” 

 

 Why? 

浮点数是不能直接判断相等的!!

 我们看调试代码:

 f赋的值并不是1.456

所以浮点数不能直接判断相等

可以用减法来判断    f - 1.456 >= -1e6 && f - 1.456 <= 1e-6

#include<stdio.h>
int main() {
	float f;
	f = 1.456;
	if (f - 1.456 >= -1e6 && f - 1.456 <= 1e-6) {
		printf("f is 1.456\n");
	}
	else {
		printf("f is not 1.456\n");
	}
	return 0;
}

 ps:

        本人编程小白一个,第一天在c站上发文章,写的不好,欢迎各位提出意见。 

           

  • 11
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Hud_Hicks

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值