这样验证没有问题。
有效位数并不是整数,一定是6位或一定是7位。实际上,它可能是 2 的某个次方分之一。
所以,它并不是10的整数倍分之一。
32位单精度:M段是23位,则精度为:1/2^23 = 0.0000001192092895
精度大致为 7 位
64位单精度:M段是52位,则精度为:1/2^52 = 2.2204460492503e-16
精度大致为 16 位
书上说,6-7位,15到16位,只是大概范围,并不表示在不同电脑上有差别。
如果你有兴趣,可以了解一下 IEEE 浮点数的规则。S,E,M 三段,其中 M 段的位数,表示了其精度。S是符号位,E是指数位。
至于数据类型的精度,其主要与你的平台有关。Win32 平台下,如果使用IEEE浮点数的编译器,编译出来的程序,其精度就是书上所说。
某些编译器可能可以设置为 IBM 浮点数规则。或者某些平台是 64 位的,那么某些 64 位编译器可能支持更长的数据类型,其精度可能会有所提高。
您好,首先说明我自己的水平也是半斤八两,这问题也引起了我的思考。我自己的思路是这样的。
分配多少内存还有表示数值这方面,是在编译的时候设定的,也就是编译器不同,表示也不一样,有可能编译器都遵循同一个标准。
其次,32位系统和64位系统在表示的范围和精度上面是不一样的。而装软件的时候也有32位版本和64位版本的区别。所以编译器也是一个软件,也会有区别。
不知道这样思考有没有错,非常荣幸能和楼主讨论学习。
是对的。不过你要多试几组数,它的精确度不是固定的。
其他方法应该都是大同小异。
和编译器有关。正常情况下float 6~7 位,double 15~16 位,但你可以通过编译器开关让它把float全部处理为 double。
开发环境软件就显示了这么几位。有些小数位数很长的数只显示了前边的几位,后面的被四舍五入了。
和电脑cpu的位数相关的,64位和32位计算机不同的