浮点型数据之间精度的介绍和大小关系比较

关于浮点数据类型精度的介绍

单精度浮点精度 单精度浮点的有效数字一般有7~8位,取值范围+-(10^-38~10^38);

双精度浮点精度 单精度浮点的有效数字一般有15~16位;取值范围+-(10^-308~10^308);

写个程序来研究一下精度问题

以float数据类型为例

#include <stdio.h>
int main()
{
    float a=1234567.89f;//明显超过了float的有效数字;试着运行一下什么结果
	printf("%f",a);
	return 0; 
    
}

运行结果为:1234567.875000
--------------------------------
Process exited after 0.006925 seconds with return value 0
请按任意键继续. . .

        则当数据超过有效数字时,其余数字会变为随机数

再看下面的程序

#include <stdio.h>
int main()
{
    float a=1.345f,b=1.123f;//明显超过了float的有效数字;试着运行一下什么结果
	
	float c = a + b;
	
	if(c==2.468)
	{
		printf("相等!");
	}else{
		printf("不相等!c = %.10f或%f",c,c);
	}
	
	return 0; 
    
}

运行结果:不相等!c = 2.4679999352或2.468000
--------------------------------
Process exited after 0.006725 seconds with return value 0
请按任意键继续. . .

        ?!为什么不相等呢,因为浮点型数据小数部分是有误差的,而且浮点型数据的输出精度会四舍五入

让我们试一试

#include <stdio.h>
int main()
{
    printf("%.3f\n",0.0039);
	printf("%.30f\n",0.0039);
	printf("%.3f\n",0.00039);
	
	
	return 0; 
    
}

输出结果为:

0.004
0.003899999999999999800000000000
0.000

--------------------------------
Process exited after 0.06182 seconds with return value 0
请按任意键继续. . .

可以看出,实型数据的表示会进行四舍五入

可以再写个程序看看是否正确

#include <stdio.h>
int main()
{
    printf("%.1f\n",1.555);
	printf("%.1f\n",1.5546);
	printf("%.1f\n",1.554);
	
	
	return 0; 
    
}

运行结果:

1.6
1.6
1.6

--------------------------------
Process exited after 0.06067 seconds with return value 0
请按任意键继续. . .

#include <stdio.h>
int main()
{
    printf("%.2f\n",1.556);
	printf("%.2f\n",1.5546);
	printf("%.2f\n",1.554);
	
	
	return 0; 
    
}

运行结果:

1.56
1.55
1.55

--------------------------------
Process exited after 0.06011 seconds with return value 0
请按任意键继续. . .

%.mf 可以让浮点数保留 m 位小数输出 

保留的是精度为 四舍六入五成双

就是 5以下舍弃 5以上进位 而当下一位为5时要讨论:
被化简的小数位后面一位的数字等于5时

要看5前面的数字,若是奇数则进位,

若是偶数则将5舍掉,即修约后末尾数字都成为偶数;

若5的后面还有不为“0”的任何数,则此时无论5的前面是奇数还是偶数,均应进位。

所以由以上例子可以看出,实数在计算机中只能近似表示,运算中也会产生误差;

所以,在判断浮点型数据是否相等时,可以给俩数据规定精度

eg:

#include<stdio.h>
#include<math.h>
int main()
{
    flaot a,b;
    if(fab(a-b)<1e-12)\\定义精度1e-12也可以1e-6等
    {

    }
}

以上就是本人所学心得,如有错误请指正

关于四舍五入相关问题可以看此博主C语言四舍五入文章
http://t.csdn.cn/0OU2R

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

刺猬崔‍️

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

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

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

打赏作者

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

抵扣说明:

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

余额充值