32位计算机中Number.MAX_SAFE_INTEGER的值是否仍为2^53 - 1?
JavaScript MAX_SAFE_INTEGER 32位环境相关问题解答
问题1:32位计算机中Number.MAX_SAFE_INTEGER取值是否仍然为2^53 - 1?
是,该取值和底层硬件是32位还是64位没有关联。Number.MAX_SAFE_INTEGER的取值是ECMAScript语言标准明确规定的,JS的所有数值默认都采用IEEE 754双精度64位浮点数格式实现,只要是符合规范的JS引擎,无论运行在什么架构的硬件上,这个常量的取值都固定为2^53 - 1。
问题2:32位环境下如何存储2^53 - 1这个数值?
32位硬件的“32位”指的是CPU单次运算可处理的字长,不代表系统只能存储最大32位的数值。
64位双精度浮点数的存储和运算逻辑是由JS引擎在软件层实现的:存储时会把64位的二进制数据拆分为两个连续的32位片段,存入内存的相邻地址;读取和运算时,再将两个32位片段拼接为完整的64位数据,分两次完成运算逻辑即可,不需要硬件原生支持64位数值的处理,因此完全可以在32位环境下正常存储和使用2^53 - 1。
内容的提问来源于stack exchange,提问作者Amjed Omar
相关产品推荐
相关产品推荐

