【发布时间】:2013-07-06 14:27:46
【问题描述】:
如果我们看一下 C 语言的委员会草案:n1570
特别是Annex G关于复数数学函数的行为,我们可以看到复指数在无穷大处具有以下行为:
cexp(+infinity+I*infinity)=+/-infinity+I*NaN
(where the sign of the real part of the result is unspecified).
我的问题是:为什么?
从数学的角度来看,如果我们以同样的方式逼近实部和虚部的无穷大,极限是复无穷大(例如参见Wolfram Alpha),它对应于一个无穷大的模数和未定义的参数.
此外,如果我们查看 cexp 函数的行为,它的实部和虚部相当可比(参见 Wolfram Alpha 上的 3D 图)。
所以,我早就料到了:
cexp(+infinity+I*infinity)=+/-infinity+/-I*infinity
代替:
cexp(+infinity+I*infinity)=+/-infinity+I*NaN
我知道这样做是有充分理由的,但我不明白。有人可以解释一下这背后的逻辑吗?
编辑:这里是链接的摘要:
【问题讨论】:
-
文档“Rationale for International Standard -- Programming Languages -- C”的第 G.5.1 节似乎包含一些有关处理包括 cexp() 在内的复杂函数的特殊值的相关 cmets。你可以在这里找到它:open-std.org/jtc1/sc22/wg14/www/C99RationaleV5.10.pdf
-
感谢您提供此链接。这很有启发性,但它并没有带来关于案例
cexp(infinity+I*infinity)的答案。 -
我所知道的唯一解释标准委员会思考过程的文件是基本原理文件。除非您能找到相关的委员会会议记录(不知道 ISO 委员会是否提供公开记录)或可以接触到委员会成员,否则关于标准为何如此表述的问题恐怕仍然没有答案。
标签: c math floating-point iso complex-numbers