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

android内核libm pow(float,float)实现,第1张

概述我在pow调用(#include< math.h>)上测试了极端情况,特别是pow(-1,Inf). 在我的桌面(Ubuntu)上,我得到了结果1.0,这符合2008 IEEE浮点规范. 我在运行Android Gingerbread内核时运行相同的测试,然后返回NaN. 我环顾四周,可以看到在不同平台的标准库中确实存在很多pow的实现,在pow(-1,Inf)的情况下,它们被编码以产生不同的结果 我在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在实数中不存在,但我们必须记住,浮点数不是实数,事实上,对于所有足够大的浮点数y,pow(-1,y)是1.这是因为所有足够大的浮点数都是整数.从这个角度来看,将pow(-1,infinity)定义为1是非常合理的,这实际上导致在某些浮点计算中更有用的行为.

有很多非常称职的数学家(以及非常熟练的程序员和编译器编写者)参与了C和IEEE-754委员会,他们并没有轻率地做出这些决定.每个标准都有错误,但这不是其中之一.

总结

以上是内存溢出为你收集整理的android内核libm pow(float,float)实现全部内容,希望文章能够帮你解决android内核libm pow(float,float)实现所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1121849.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-29
下一篇 2022-05-29

发表评论

登录后才能评论

评论列表(0条)

保存