首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >java规范中的浮点表示法

java规范中的浮点表示法
EN

Stack Overflow用户
提问于 2015-01-09 17:30:48
回答 1查看 101关注 0票数 0

这里:http://docs.oracle.com/javase/specs/jls/se8/html/jls-4.html#jls-4.2.3,它说:

任何浮点值集的有限非零值都可以用s · m · 2^(e - N + 1)表示,其中s+1-1m是小于2^N的正整数,eEmin = -(2^(K-1)-2)Emax = 2^(K-1)-1之间的整数,包括ND12是依赖于值集的参数。

下面有一张表格:

代码语言:javascript
复制
Parameter   float   
N              24   
K              8    

因此,假设是N = 24和K = 8,那么我们可以从公式中得到以下值:s · 2^N · 2^(2^(K-1)-1 - N + 1),它根据表中指定的值给我们:s * 2^24 * 2^(127 - 24),它等于s * 2^127。但是float只有32位,所以不可能在其中存储这么大的数字。

因此,很明显,初始公式应该以不同的方式读取。那又如何呢?同样在javadoc中用于Float值:价值

上面写着:

保持浮点数最大正定值的常数,(2-2^-23)·2^127

这也没有意义,因为结果值要比2^32大得多--这可能是可以存储在浮存变量中的最大值。所以,我又一次误解了这个符号。那该怎么读呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-01-09 17:50:10

浮点表示法的思想是存储比用整数表示的相同空间(字节)存储的数字范围大得多。因此,例如,您说“结果值远大于2^32”。但是,只有当我们在一个典型的数学类中存储一个典型的二进制数时,这才会成为一个问题。

相反,浮点表示将这32字节分解为两个主要部分:- significand into。

为了简单起见,假设这个值使用3个字节,指数使用1个字节。另外,假设其中的每一个都是典型的二进制整数表示方式。因此,这三个字节的值可以是2^24,或者2^23,如果您想为符号保留一个位的话。但是,另一个字节最多可以存储2^7 (如果您也想要一个符号的话)。

因此,您可以表示500^ 100,方法是将500存储在三个字节中,100存储在1字节中。

本质上,一个人不可能精确地存储每一个数字。一个将其更改为显着性形式,并且可以存储与为significand保留的部分一样多的有效数字(本例中为3个字节)。

而不是试图解释并发症,请查看维基百科的这篇文章以获得更多信息。

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

https://stackoverflow.com/questions/27866010

复制
相关文章

相似问题

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