为什么 webassembly 有平方根操作码?

问题描述

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

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

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

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

如果我们制作两桶函数,

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

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

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

还有一个属性 sqrt(x*x)=x 对于所有 x,其中 x*x 不会溢出或下溢,这对于可能涉及舍入 (see this SO answer ).

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)