2024-09-10 15:07:59
单精度型和双精度型的区别在于它们的精确程度不一样,也就是小数部分的有效位数不一样。
单精度数(float型)在32位计算机中存储占用4字节,也就是32位,有效位数为7位,小数点后6位;双精度数(double型)在32位计算机中存储占用8字节,也就是64位,有效位数为16位,小数点后15位。
比如3.1415926535897932384这个小数,如果定义成float型,那么只会留下小数点后5位,也就是3.141592,如果定义成double型,那么只会留下小数点后15位,也就是3.141592653589793。
扩展资料
计算机的数都是以
二进制科学计数法包含三个部分:符号位,指数位和尾数部分。单精度数的符号位,指数位和尾数部分分别为1,8,23,而双精度为1,11,52。
而单双精度中的精度就主要取决于尾数部分的位数。float的尾数尾数为23位,除去全部为0的情况以外,最小为2的-23次方,因此float小数部分只能精确到后面6位。类似的,double尾数位数为52,最小为2的-52次方,因此只能精确到小数点后15位。
参考资料来源:
参考资料来源:
2024-09-10 03:29:58
2024-09-10 00:12:47
float(10%3) double (10%3)结果有什么不同啊??
当然有不同,虽然都是10%3=3,但是前者强制转换成float类型,是4个字节的,而后者强制转换成double类型,是8个字节的。4个字节和8个字节,区别大吧,精度当然差很多
2024-09-10 12:13:03
float(10%3) double (10%3)结果有什么不同啊??
你这样是看不出结果的,你在用10(注意这是个整形数)%3的时候,结果先是强制转换为整形,也就是1(这是个整形数),接着再用float或者double进行强制转换也不会有精度问题,所以这样是看不出来的,你可以这样查看单精度和双精度数:
printf("%.15f\n%.15lf", float(10.0/3), double(10.0/3));
强制float和double输出小数点以后15位数据,你就可以看到这样的结果:
看,float型数据在小数点6位后就乱码了,这样明白了吧。
对了你如果用10/3这样也是不行的,它强制输出的是整形。
2024-09-10 02:37:21