我正在努力提高对 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/