Math.floor(x / y)是否确定?

问题描述 投票:-1回答:2

根据this的帖子,JavaScript中的浮点数不是确定性的。

我想知道,以下代码是否具有确定性?

z = Math.floor(x/y)

如果没有,我如何在JavaScript中进行确定性整数除法?

编辑:我想知道我是否可以依赖于不同JavaScript实现的结果值(假设它们遵循标准)。

javascript integer-division deterministic
2个回答
1
投票

它应该是确定性的。

根据the specification

20.2.2.16 Math.floor(x)

返回不大于x并且等于数学整数的最大(最接近+∞)Number值。如果x已经是整数,则结果为x。

  • 如果x是NaN,则结果为NaN。
  • 如果x为+0,则结果为+0。
  • 如果x是-0,则结果为-0。
  • 如果x是+∞,则结果为+∞。
  • 如果x是-∞,则结果为-∞。
  • 如果x大于0但小于1,则结果为+0。

注意Math.floor(x)的值与-Math.ceil(-x)的值相同。

当底层引擎使用更高精度的数字时,某些数学函数的非确定性与可能的舍入问题有关。这不应该是一个因素。

更新:

分部是also deterministic。这里的JS规范取决于IEEE 754规范。但该规范是确定性的。 (对不起,没有链接,因为实际的规格是支付的。)

非确定性是在不太常见的JS函数中。


-1
投票

是。 Math.floor始终返回最小的整数值。

虽然这不是确定性的:z = 3/1.5; //z !== 2

根据功能的设计,这是:z = Math.floor(3/1.5); //z === 2

有关详细信息,请参阅the MDN docs

© www.soinside.com 2019 - 2024. All rights reserved.