首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否允许JS引擎改变NaN的位数?

问是否允许JS引擎改变NaN的位数?
EN

Stack Overflow用户
提问于 2019-11-07 20:55:27
回答 3查看 461关注 0票数 13

在JavaScript中,NaN值可以在内部以64位双倍的范围表示.具体来说,有以下按位表示的任何双重表示:

代码语言:javascript
复制
x111 1111 1111 xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx

被解释为NaN。我的问题是:假设我使用ArrayBuffers将两个32位的uint转换为一个JS号,然后将其传递给另两个32位的uints。恢复的比特是否与原始位相同,或者JS引擎是否允许任意更改NaN的位?换句话说,JS数字能被用来存储64位的损失吗?

EN

回答 3

Stack Overflow用户

发布于 2019-11-08 15:26:29

我曾经向a question询问过关于NaN值的硬件依赖性的问题,并且注意到当一个NaN值加载到处理器寄存器中时,一些CPU会悄悄地将“信令NaN”转换为“安静的NaN”(设置安静的NaN位)。因此,至少有一个位,即安静的位,不能用于存储任意数据.

使用其他位,只要设置了安静的NaN位,可能是安全的。但是,这里似乎仍然有实施的空间--依赖,因此无法保证。

这类问题就是为什么普通的语言操作避免做任何依赖于NaN内部值的操作,而倾向于将所有的NaN视为“只是NaN”。

票数 1
EN

Stack Overflow用户

发布于 2022-06-10 11:01:22

根据IEEE-754标准,对于非信令NaNs,尾随位应该被保留,如果它们代表某种规范,则应该保留它们。

如果要传递浮点结果,则对于具有安静的

输入的操作(最大操作和最小操作除外),结果应该是一个安静的NaN,它应该是输入NaN之一。如果十进制输入NaN的尾随意义和字段是规范的,那么如果选择该NaN作为结果NaN,则将保留该字段的位模式。

我不会指望它的。至于领头牌,你绝对不能指望它。

对于所有其他操作,此标准不指定NaN结果的符号位,即使只有一个输入NaN,或者当NaN是从无效操作生成的。

票数 1
EN

Stack Overflow用户

发布于 2019-11-19 00:23:45

最初的IEEE-754标准故意将NaN的位数留给实现。它确实提供了一些提示,例如

您可以将创建NaN的位置的原始内存地址。

同时,算术对于如何处理NaN有特定的规则,这与底部的位没有任何关系。我认为它甚至没有说当添加两个NaNs时该做什么--让这些位元远离其中一个,而不是组成另一组位元。结果肯定仍然是一个NaN。

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

https://stackoverflow.com/questions/58756774

复制
相关文章

相似问题

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