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

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

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

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

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

以float数据类型为例

#include 
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 
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 
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 
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 
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
#include
int main()
{
    flaot a,b;
    if(fab(a-b)<1e-12)\\定义精度1e-12也可以1e-6等
    {

    }
}

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

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

你可能感兴趣的:(c++,c语言,数据分析,经验分享,笔记)