首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >float如何保证7位精度?

float如何保证7位精度?
EN

Stack Overflow用户
提问于 2018-05-23 23:07:01
回答 2查看 1.7K关注 0票数 0

据我所知,单精度浮点数有1位表示符号,8位表示指数,23位表示尾数。

我可以理解7位整数适合23位尾数,并且不会降低精度,但我不能理解像1234567000000000这样的数字如果没有松散的"1,2,3,4,5,6,7“数字是如何拟合的,这背后的数学原理是什么?

EN

回答 2

Stack Overflow用户

发布于 2019-11-08 15:02:34

我看到了一个这样的数学证明:

代码语言:javascript
复制
-log10(2^(-24)) = 7.225

24表示包含点前的1。如果不是,则在点之前包括1:

代码语言:javascript
复制
-log10(2^(-23)) = 6.9
票数 1
EN

Stack Overflow用户

发布于 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),精度损失发生在较低有效数字中。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50491808

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档