据我所知,单精度浮点数有1位表示符号,8位表示指数,23位表示尾数。
我可以理解7位整数适合23位尾数,并且不会降低精度,但我不能理解像1234567000000000这样的数字如果没有松散的"1,2,3,4,5,6,7“数字是如何拟合的,这背后的数学原理是什么?
发布于 2019-11-08 15:02:34
我看到了一个这样的数学证明:
-log10(2^(-24)) = 7.22524表示包含点前的1。如果不是,则在点之前包括1:
-log10(2^(-23)) = 6.9发布于 2018-05-23 23:32:08
我不能理解像1234567000000000这样的数字如果没有松散的"1,2,3,4,5,6,7“数字是如何拟合的,这背后的数学原理是什么?
我不太明白你这里的理由。无论如何,下面是如何将1234567000000000转换为IEEE-754 binary32 (也称为.single,也就是C中的float ):
1.09651577472686767578125 * 2**50
指数应用偏置(-127),尾数和指数以基数2编码,尾数的第一位被丢弃,因为它始终是1。
自己检查一下https://babbage.cs.qc.cuny.edu/IEEE-754/
正如您可以注意到的,转换为float后的十进制值不等于1234567000000000,而是大约等于1234567008616448,您可以看到前7位数字匹配。
由于用于编码尾数的比特量有限(也由于转换为基数2),精度损失发生在较低有效数字中。
https://stackoverflow.com/questions/50491808
复制相似问题