在寻找代码高尔夫挑战的答案中使用的一些黑魔法时,我注意到 Node 11.6.0 中的以下行为:
// 1) exact result with BigInts
console.log(9n ** 66n); // 95500495(...)3841n
console.log(9n ** 66n % 79n); // 21n
// 2) approximation with a Number literal
console.log(9 ** 66); // 9.550049507968253e+62
console.log(9 ** 66 % 79); // 71
// 3) approximation with a variable
let n = 9;
console.log(n ** 66); // 9.550049507968251e+62
console.log(n ** 66 % 79); // 69
Run Code Online (Sandbox Code Playgroud)
本质上,n ** 66withn = 9不会导致与 相同的结果9 ** 66,这是我以前从未经历过的,尽管我在 Code Golf 上做了很多类似的奇怪的事情。
你可以在 Try it online 上运行上面的代码!服务,在发布时安装了 Node v11.6.0。
我当前的本地 Node 版本是 12.13.1,71在两种情况下都一致。
这是 Node 11.6.0 的已知问题吗?其他 Node 版本和/或其他 JS 引擎的行为方式是否相同?
附录
下面是一个更简单的例子9 ** 17:
console.log(9n ** 17n); // 16677181699666569n
console.log(9 ** 17); // 16677181699666570
let n = 9;
console.log(n ** 17); // 16677181699666568
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
123 次 |
| 最近记录: |