Math.pow()
, pow()
, 不管叫什么,很多语言(和计算器)都有一些内置函数来计算浮点数(或双精度数)的 x=a^b。有 a 为负数且 b 不是整数的特殊情况。有些会返回NaN
,有些会给出复杂的结果(咳咳 Python)。但有些实际上能够给出真正的结果,所以我想知道的是如何。为了解释我的困惑:
假设 b 是有理数:b=c/d。现在我们看一下 c 和 d 的奇偶校验:
d 是偶数:没有实数 x -> NaN 或错误
d 是奇数,c 是偶数:正 x
d 是奇数,c 是奇数:负 x
浮点数以特定格式存储,这意味着如果按字面解释,它始终是偶数 d(实际上是 2 的幂)。没有办法知道 c 和 d 的真实奇偶性,因为该信息在计算中丢失了。它只需要猜测。
所以我猜测它在做什么——它试图找到一个接近 b 的理性 c/d,奇数 d 并且 c 和 d 都小于某个阈值 t。较小的 t 意味着它可以更确定它是正确的,但它会在更少的数字上起作用。如果成功,它使用 c 的奇偶校验。否则它假装 d 是偶数。毕竟,浮点数可以是任何东西,数学库不想通过假设它可能不是合理的而给出可能错误的结果。
这只是我的猜测。如果有人真正看到了这些幂函数之一的代码(或规范,那也很好)并且可以提供洞察力,那就太好了。