gpt4 book ai didi

math - 幂函数处理非整数指数的负底数

转载 作者:行者123 更新时间:2023-12-02 03:01:27 39 4
gpt4 key购买 nike

Math.pow() , pow() ,不管它叫什么,很多语言(和计算器)都有一些内置函数来计算浮点数(或 double 数)的 x=a^b 。有一个特殊情况,a 为负而 b 不是整数。有些会返回NaN , 其他人给出了一个复杂的结果 (ahem Python)。但有些实际上能够给出真实的结果,所以我想知道如何。为了解释我的困惑:

假设 b 是有理数:b=c/d。现在我们看看 c 和 d 的奇偶性:

  • d 是偶数:没有真正的 x -> NaN 或错误
  • d 是奇数,c 是偶数:正 x
  • d 是奇数,c 是奇数:负 x

  • 浮点数存储在 a particular format这意味着如果从字面上解释它总是偶数 d(实际上是 2 的幂)。没有办法知道 c 和 d 的真实奇偶校验,因为这些信息在计算中丢失了。它只需要猜测。

    所以我猜测它在做什么 - 它试图找到一个接近 b 的合理 c/d,奇数 d 并且 c 和 d 都小于某个阈值 t。较小的 t 意味着它可以更确定它是正确的,但它适用于更少的数字。如果成功,则使用 c 的奇偶校验。否则它假装 d 是偶数。毕竟,浮点数可以是任何东西,数学库不想通过假设它可能是合理的而给出可能错误的结果。

    不过这只是我的猜测。如果有人真的看过这些幂函数之一(或规范,那也不错)中的代码并且可以提供洞察力,那就太好了。

    最佳答案

    初见:Power by squaring for negative exponents
    现在让我们假设案例 x^y哪里x<0y不是整数。如果你使用

    x^y = exp2(y*log2(x))
    那么你受 log2 的限制因此定义范围为 NaN|x|^y .如果你想要更好的东西,你可以尝试剖析 y到这种形式:
    y = a/b
    哪里 a,b是整数。如果可能(或者如果应用了四舍五入),那么您将问题更改为:
    x^y = (x^a)^(1/b)
    所以现在您可以处理更多情况(正如您所建议的那样):
  • 如果 a is even sub-result 不再是负数
    x^a>=0所以(x^a)^(1/b)>=0
  • 如果两者都a,b奇数结果是否定的
  • 否则结果是 NaN或使用 |x|^y反而

  • 现在回到您的 float问题编号始终采用以下形式:
    y = mantissa*exp2(exponent)
    所以是的 b是偶数(除非 exponent!=0 这意味着数字是整数)。如 mantissa存储为整数,您可以通过检查其 来获得其奇偶校验。 LSB .不要忘记在 floats MSB 丢失,始终应该是 1除非像非规范化或 Nan/Inf 这样的特殊情况数字存在

    关于math - 幂函数处理非整数指数的负底数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45890916/

    39 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com