【问题标题】:Why does webassembly have a square root opcode?为什么 webassembly 有平方根操作码?
【发布时间】:2021-04-15 16:52:25
【问题描述】:

Webassembly 仅提供一种更高级的浮点运算:平方根。

它没有任何其他通常在 CPU 中实现的功能,例如幂函数和三角函数,官方常见问题解答中解释了这个基本原理:

WebAssembly 不包含自己的数学函数,如 sin、cos、exp、 战俘,等等。 WebAssembly 对此类功能的策略是允许 它们将在 WebAssembly 本身中作为库例程实现(注意 x86 的 sin 和 cos 指令缓慢且不精确, 无论如何,这些天通常都避免了)。希望更快使用的用户 WebAssembly 上不太精确的数学函数可以简单地选择一个数学 这样做的库实现。

这引出了一个问题,如果平方根有什么特别之处可以证明有理由对其进行例外处理。它对距离计算很有用,但它是否比其他类型的幂或指数更频繁地出现?它在 CPU 上是否特别快并且他们想利用它?

如果我们制作两个函数桶,

  1. 首先是加法、乘法、除法和余数和
  2. 第二个是幂、三角函数及其反演

那他们为什么要把平方根放在第一位呢?

编辑:我刚刚意识到 sqrt 的特殊之处在于可以通过将指数向右移动来找到近似值。确切的结果仍然需要找到尾数的平方根,这仍然是一个交互过程。但是,正如 Olsonist 所指出的那样,也许这一领先优势使 sqrt 足以保证将其纳入 IEEE 所需的操作中。

还有一个属性是 sqrt(x*x)=x 对所有 x 而言,x*x 没有上溢或下溢,这对于可能涉及舍入 (see this SO answer) 的操作是不常见的。

【问题讨论】:

  • 平方根是比正弦、余弦、e^x 等更简单的函数。它很容易计算,我们有完整的证据来说明如何准确计算它。其他的更难,我们没有完整的证明(关于各个方面;很复杂)。
  • @EricPostpischil 好吧,因为 (x + x/2)^2 = 9/4*x^2 您可以进行二进制搜索以获得一个整数平方根,该整数平方根取尾数的对数位循环并仅使用移位和求和(无乘法)。正如我在编辑中已经指出的那样,指数部分更容易。也许我错过了一些东西,但这似乎更容易。我怀疑仅通过移位和相加就能如此快速地计算正弦。

标签: webassembly ieee-754


【解决方案1】:

IEEE 754-2008 是 WebAssembly 的要求,sqrtIEEE 754-2008 的要求,而 sin em>, cos, ... 不是 IEEE 754-2008 的要求。它们是recommended,但不是必需的。

【讨论】:

  • 很有趣,但这将同样的问题转移到了 IEEE 754。 sqrt 有什么特别之处?
  • 在 754 中也需要除法。sqrt 和除法是足够接近的表亲,因此如果浮点实现要进行除法,那么做 sqrt 的额外工作很少。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-26
  • 1970-01-01
  • 1970-01-01
  • 2019-05-02
相关资源
最近更新 更多