C语言中float和double的问题。

问题如图所示,急求详解。谢谢。
2025-04-15 06:44:37
推荐回答(5个)
回答1:

这样验证没有问题。

有效位数并不是整数,一定是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 位编译器可能支持更长的数据类型,其精度可能会有所提高。

回答2:

您好,首先说明我自己的水平也是半斤八两,这问题也引起了我的思考。我自己的思路是这样的。

分配多少内存还有表示数值这方面,是在编译的时候设定的,也就是编译器不同,表示也不一样,有可能编译器都遵循同一个标准。

其次,32位系统和64位系统在表示的范围和精度上面是不一样的。而装软件的时候也有32位版本和64位版本的区别。所以编译器也是一个软件,也会有区别。

不知道这样思考有没有错,非常荣幸能和楼主讨论学习。

回答3:

  1. 是对的。不过你要多试几组数,它的精确度不是固定的。

  2. 其他方法应该都是大同小异。

  3. 和编译器有关。正常情况下float 6~7 位,double 15~16 位,但你可以通过编译器开关让它把float全部处理为 double。

回答4:

开发环境软件就显示了这么几位。有些小数位数很长的数只显示了前边的几位,后面的被四舍五入了。

回答5:

和电脑cpu的位数相关的,64位和32位计算机不同的