gpt4 book ai didi

android 内核 libm pow(float,float) 实现

转载 作者:太空宇宙 更新时间:2023-11-03 12:23:59 26 4
gpt4 key购买 nike

我正在 pow 上测试极端情况调用( #include <math.h> ),特别是 pow(-1, Inf) .

在我的桌面 (Ubuntu) 上,我得到结果 1.0,这符合 2008 IEEE 浮点规范。

我在运行 Android Gingerbread 内核时运行了相同的测试,结果返回了 NaN。

我环顾四周,发现pow的实现确实有很多在不同平台的标准库中,在案例中 pow(-1, Inf)它们被编码以产生不同的结果。

问题是哪一个应该被认为是正确的?有什么想法或想法吗?

如果我在错误的论坛上发帖,我深表歉意,我点击了 android 开发人员资源中的链接,最后来到了这里。

最佳答案

C 标准在这一点上非常清楚(§F.9.4.4);没有“想法或想法”的余地:

pow(−1, ±∞) returns 1.

附件 F 仅在实现定义 __STDC_IEC_559__ 时适用,但毫无疑问 1.0 是正确答案。

我怀疑这是一个已经泄露到 NDK 中的 Java 主义。 (Java 将 pow(-1,infinity) 定义为 NaN):

If the absolute value of the first argument equals 1 and the second argument is infinite, then the result is NaN.

编辑:由于 Matteo 反对说这“毫无意义”,因此我将提供几句话来解释委员会为何做出此选择。虽然 lim_{n->inf} (-1)^n 不存在于实数中,但我们必须记住, float 不是实数,事实上,对于所有足够大的数 float ypow(-1,y)+1。这是因为所有足够大的 float 都是偶数。从这个角度来看,将 pow(-1,infinity) 定义为 +1 是非常合理的,事实证明这实际上会导致一些 float 中更有用的行为-点计算。

C 和 IEEE-754 委员会中有数量惊人的非常有能力的数学家(以及非常熟练的程序员和编译器作者),他们不会轻率地做出这些决定。每个标准都有错误,但这不是其中之一。

关于android 内核 libm pow(float,float) 实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7409082/

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