首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >android内核libm (浮点,浮点)实现

android内核libm (浮点,浮点)实现
EN

Stack Overflow用户
提问于 2011-09-13 22:01:29
回答 1查看 745关注 0票数 3

我正在测试pow调用(#include <math.h>)上的角落案例,特别是pow(-1, Inf)

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

我在运行安卓姜饼内核时也会运行相同的测试,然后NaN就会返回。

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

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

如果我在错误的论坛上发帖,我很抱歉,我跟踪了android开发者资源的链接,并在这里结束。

EN

回答 1

Stack Overflow用户

发布于 2011-09-14 00:25:13

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

pow(−1,±∞)返回1。

附件F只适用于定义__STDC_IEC_559__的实现,但毫无疑问,1.0是正确的答案。

我怀疑这是一种已经渗透到NDK中的Java主义。( pow(-1,infinity)NaN定义为NaN):

如果第一个参数的绝对值等于1,而第二个参数是无限的,则结果是NaN。

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

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

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7409082

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档