user-0 提问: 关于float能否表示数 的问题

回复:
user: user-1
content: 比如用十进制无法精确表示1/3，但用三进制0.1就可以。

user: user-2
content: 引用 23 楼 zhao4zhong1 的回复:[quote=引用 22 楼 Sanlence 的回复:] [quote=引用 21 楼 zhao4zhong1 的回复:] [quote=引用 20 楼 Sanlence 的回复:] 1楼正解，关于这个问题，建议你看书《深入理解计算机系统》第二章，里面有详细的解释。float只是近似值。 十进制数也是近似值好不啦。[/quote] 你说的十进制是指int还是float啊？int全都是精确的，float才有精度这一说。[/quote] 我说的十进制跟电脑无关。[/quote] 十进制只跟字长有关，字长只是表示数的范围有关，跟精度无关。在数学上，从没听说十进制有精度一说

user: user-3
content: 既然任意进制之间可以互相转换，那么一种进制有精度问题必然其他进制也有精度问题，比如单精度浮点数小数点后23位尾数（二进制），十进制精度就是小数点后6~7位。

user: user-1
content: 引用 22 楼 Sanlence 的回复:[quote=引用 21 楼 zhao4zhong1 的回复:] [quote=引用 20 楼 Sanlence 的回复:] 1楼正解，关于这个问题，建议你看书《深入理解计算机系统》第二章，里面有详细的解释。float只是近似值。 十进制数也是近似值好不啦。[/quote] 你说的十进制是指int还是float啊？int全都是精确的，float才有精度这一说。[/quote] 我说的十进制跟电脑无关。

user: user-2
content: 引用 21 楼 zhao4zhong1 的回复:[quote=引用 20 楼 Sanlence 的回复:] 1楼正解，关于这个问题，建议你看书《深入理解计算机系统》第二章，里面有详细的解释。float只是近似值。 十进制数也是近似值好不啦。[/quote] 你说的十进制是指int还是float啊？int全都是精确的，float才有精度这一说。

user: user-1
content: 引用 20 楼 Sanlence 的回复:1楼正解，关于这个问题，建议你看书《深入理解计算机系统》第二章，里面有详细的解释。float只是近似值。 十进制数也是近似值好不啦。

user: user-2
content: 1楼正解，关于这个问题，建议你看书《深入理解计算机系统》第二章，里面有详细的解释。float只是近似值。

user: user-1
content: 关于十进制数能否表示所有数的问题……

user: user-4
content: 引用 9 楼 DelphiGuy 的回复:[quote=引用 6 楼 lm_whales 的回复:]   请问什么叫“数据在2^-127～2^（127+23） 只能表示23个数，也就是23 个位 只有一个位为1 的23个数。”？ 尾数23位中，二进制值为 100000000.。。。。 010000000。。。。 001000000。。。。 这一系列浮点数（隐藏位为0，指数 是-127 ）。是除了0之外，绝对值最小的浮点数23个浮点数了，称为非规格化浮点数 哦，加上正负号，共有46 个

user: user-3
content: 引用 6 楼 lm_whales 的回复:凡是可以表示成± （Σａ[i]*2^i+Σa[j]*2^-j)  其中，a[i[,a[j] 为0或者1 并且 max(i)+max(j) <126的, i,j<=126的，大约都没问题 数据在2^-127～2^（127+23） 只能表示23个数，也就是23 个位 只有一个位为1 的23个数。 最大数，大概是2^128-1  大约是这样，没太仔细计算 实际上会不会这样，要去验证，可能未必都是这样的  请问什么叫“数据在2^-127～2^（127+23） 只能表示23个数，也就是23 个位 只有一个位为1 的23个数。”？

user: user-5
content: 根据IEEE 754标准,浮点数在计算机内部存储时主要分为符号位（sign）、指数（exponent）部分、尾数（fraction）部分 http://blog.csdn.net/lzyzk/article/details/49949061

user: user-6
content: 计算机能精确表示的小数只有那么几个

user: user-3
content: 引用 14 楼 lm_whales 的回复:我只是说个大概，怎么就乱说了 这是IEEE浮点数的规范 我只是没有搬原文而已  难道IEEE浮点数的规范 非规格化数只有46个？

user: user-3
content: 引用 14 楼 lm_whales 的回复:我只是说个大概，怎么就乱说了 这是IEEE浮点数的规范 我只是没有搬原文而已  说错了就是错了，不是大概，你对于非规格化数的解释完全是错的。

user: user-1
content: 引用 3 楼 zhao4zhong1 的回复:浮点数格式 http://bbs.csdn.net/topics/390676437 理解和讨论之前请先学会如何观察！

user: user-4
content: 我只是说个大概，怎么就乱说了 这是IEEE浮点数的规范 我只是没有搬原文而已

user: user-3
content: #11还在乱说，我建议您吧，最好自己先搞清楚再出来说，否则既误导别人，还加深了错误认知，浪费自己的时间，害人害己。

user: user-3
content: 引用 10 楼 lm_whales 的回复:[quote=引用 9 楼 DelphiGuy 的回复:] [quote=引用 6 楼 lm_whales 的回复:]   请问什么叫“数据在2^-127～2^（127+23） 只能表示23个数，也就是23 个位 只有一个位为1 的23个数。”？ 尾数23位中，二进制值为 100000000.。。。。 010000000。。。。 001000000。。。。 这一系列浮点数（隐藏位为0，指数 是-127 ）。是除了0之外，绝对值最小的浮点数23个浮点数了，称为非规格化浮点数 哦，加上正负号，共有46 个  [/quote]  您能不能先把语文学好。难道您认为： “数据在2^-127～2^（127+23） 只能表示23个数，也就是23 个位 只有一个位为1 的23个数。” 和您上面解释的能是一个意思？  而且您上面的解释也不知所云，非规格化浮点数是指数为0（+-0），尾数不全为0的数（并非尾数中只有1位为1），对于单精度非规格化浮点，指数也不代表-127，而是-126，所以表达范围是+- 2^-126 * 0.nnnnn... 怎么可能只有23/46个呢？

user: user-4
content: 浮点数 float 类型，有几个特例 0 有+0，-0 尾数指数全0 ，符号位 分别为0,1 有+inf正无穷，-inf负无穷, 尾数为0 ，符号 分别为0，1指数部分全1 nan 不是一个数 （指数全1的其他编码）  等特殊编码 抛开符号位 还有23个编码的尾数，每个数只有一个位为1，指数值 固定为-127 ， ------这里指的是指数编码部分表示的值为2^-127。不是指数的编码---------- 算上符号位 ，每种编码正负 各一对，是46 个 非规格化浮点数，他们的隐藏位固定为0。 除了。以上特殊编码。和非规格化浮点数外 其余都是规格化浮点数. 隐藏位为1 尾数为0~111 。。。 （23个位）。 尾数部分，可表示数为 1～(2^24-1)*2^-23 除了隐藏位固定为1外，23个尾数位,从0～全1 可表示  2^24-1 个数,范围是1～(2 - 2^-23) 算上指数部分，和符号位，就是所有可表示的规格化浮点数

user: user-7
content: lz研究下 二进制 十进制相互转换 就明白了