javascript - 有没有办法查看node js内部如何存储数字?

标签 javascript node.js floating-point

我正在努力提高对 Node.js 中浮点的理解。我的理解是,JavaScript 中的每个数字都存储为 64 位浮点(这有点疯狂,但很酷),我想尝试一下这些。

有没有一种简单的方法可以打印出任意数字的内部存储方式?像 (5).toFloatRepresentation() 这样的东西会返回 101... ?

我在网上查了一下,找不到任何东西——如果我错过了一些明显的东西,我深表歉意!

我知道我可以编写一个函数来完成此操作,但我有兴趣从另一方面看事情!

谢谢!

最佳答案

My understanding is that every number in javascript is stored as a 64-bit floating point

有点,有点,不完全是。数字的内部表示相当复杂。最初,V8(Node js 所基于的 JavaScript 引擎)在内部使用标记指针。

诀窍是 64 位机器上的指针以至少三个有效位为 0 的方式对齐。因此您可以在指针本身中存储附加信息(例如,它是指针还是整数)。

因此,V8 将整数和指针存储在堆栈上,位于相同的 64 位空间中。请注意,由于最后一位用作标志,因此 V8 中的整数最多为 61 位(据我所知只有 32 位?)。另一方面, double 作为单独的对象存储在堆上。

另一方面,WebKit 实现现在使用所谓的 nan-boxing,它将指针存储在 double 值中。这是根据 NaN 具有 2^53 不同表示形式的观察得出的。您可能会问如何在 53 位中存储 64 位指针(或者实际上是 61 位指针)?好吧,你可以,因为目前(即由于 RAM 尺寸较小)仅使用 48 位。

因此,在 WebKit 中,整数确实存储为 double 。但 WebKit 还在堆栈中存储了小整数(作为适当的整数类型),以便在循环和索引中使用它们。这是因为整数运算仍然至少与浮点运算一样快,并且在许多情况下更快。

这是一篇有趣的(尽管相当过时)文章,您可能想阅读:

https://wingolog.org/archives/2011/05/18/value-representation-in-javascript-implementations

Is there an easy way to print out how an arbitrary number is stored internally?

没有。其实根本就没有办法。正如我所提到的,这完全取决于 JavaScript 引擎,并且规范中没有 API 来检索该信息。您可以尝试阅读the source code不过。

I know I could write a function that did this

你不能。无论如何,不​​是在 JavaScript 中。除非我真的误解了这个问题。内部表示和您在 JavaScript 中看到的内容是两个不同的世界。

关于javascript - 有没有办法查看node js内部如何存储数字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43291515/

相关文章:

javascript - 百分比位置 CSS/Javascript

javascript - CSS 或 HTML 帮助设置图像的最大宽度和高度

javascript - 如何将iframe的内容复制到弹出窗口中?

javascript - 从node.js发送请求到apache2.2.21

node.js - Nodejs 无法与位于 ws ://apache proxy 的服务器建立连接

c++ - 在编译时初始化 double

c++ - 除以整数保证产生相同的 float ?

javascript - 如果元素的后代包含特定单词,则执行代码的 Jquery

javascript - 在 Node.js 中包含来自外部文件的 es6 类

Mysql插入/更新不同的十进制值