到无穷远又回来:IT技术中的一个问题

27

有一些数学运算可以从+/-无穷大中产生实数。例如,exp(-infinity) = 0。在标准的C库中是否有接受IEEE-754无限制(不会抛出异常或返回NaN)的数学函数标准?我在Linux系统上,并且对于glibc的此类列表感兴趣。我在他们的在线手册中没有找到这样的列表。例如,他们关于exp的文档没有提到如何处理-infinity的情况。非常感谢任何帮助。


1
你尝试过 exp(-infinity) 吗?它会报错吗?会得到 NaN 或 0 吗? - Anders Abel
10
+1 甚至仅凭标题就值得点赞 :-) - Matteo Italia
3
语言标准并没有说明无穷大是否是可表示的值,因此这就取决于具体实现。 - Kerrek SB
9
@srean说:POSIX exp函数保证在输入为负无穷时输出为正零。 - Mat
3
IEEE 754有两个方面:二进制表示和语义。如果 std::numeric_limits<double>::is_iec559 返回 true,则意味着你可以假设表示和语义都符合IEEE 754标准。但实际上你只能假设表示符合(例如考虑g++选项--fastmath)。因此,就如@KerrekSB所说,你需要查阅实现的文档或者尝试一些东西来确定语义是否符合这个标准。祝好运。 - Cheers and hth. - Alf
显示剩余4条评论
2个回答

13

POSIX的math.h定义中的另请参阅部分链接到可接受域名的POSIX定义。

例如,fabs()

If x is ±0, +0 shall be returned.
If x is ±Inf, +Inf shall be returned.

我将提到的参见部分转换为StackOverflow-Markdown:

acos()acosh()asin()atan()atan2()cbrt()ceil()cos()cosh()erf()exp()expm1()fabs()floor()fmod()frexp()hypot()ilogb()isnan()j0()ldexp()lgamma()log()log10()log1p()logb()modf()nextafter()pow()remainder()rint()scalb()sin()sinh()sqrt()tan()tanh()y0()

我贡献了搜索/替换/正则表达式技巧。现在我们只需要一个具备cURL技巧的人。


哦,我猜我应该说“现在我有了URL,我不需要列表。我可以查找我使用的函数”。但是非常感谢你,感到很遗憾让你查找那么多东西。 - srean
@srean:没关系,这对我自己很有用 :) - Sebastian Mach
3
如果您想将所有内容整理在一个整洁的地方,那么 POSIX边缘情况(几乎)都继承自C标准的附录F。 - Stephen Canon
@Stephen:太酷了,我不知道这个。但是我不太会懒惰地将它们转换为Markdown。 - Sebastian Mach

9

C99中它在附录F中:

F.9.3.1 The exp functions
-- exp0) returns 1.
-- exp(-∞) returns +0.
-- exp(+∞) returns +∞.

附录F是规范性的,其内容如下:
实现定义了__STDC_IEC_559__应符合本附录中的规范要求。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接