2012-12-19 55 views
0

如何计算exp(i * x)其中| x | >> 2 pi?指数化大浮点虚构参数

我知道它可以用一个任意的精度库来完成,但是有没有一种算法可以稳定地执行(没有舍入错误)而不需要库?

回答

4

exp(i*x)cos(x) + i*sin(x)。即使当x很大时,好的数学库也会正确计算cos(x)sin(x)。例如,您应该在几个ULP范围内使用OS X或iOS标准数学库得到正确的结果。

在C,这应该工作:

#include <complex.h> 
… 
    double complex Y = cexp(I * x); 
+0

一个X多大会一个好的图书馆处理?我以为,一旦ulp(x)> pi,大多数库不会打扰... –

+1

@ aka.nice:一个好的库处理所有的值。 OS X和iOS处理所有值。图书馆决定“嗯,你的投入很大,你必须得到一些计算错误,所以我不会很努力”。所有的图书馆知道它是通过一个浮点对象非常明确的(它是在一个非常好的标准中指定的)完全代表一定的价值,其工作是返回该值的余弦或正弦。很可能用户在输入输入时要小心,图书馆应避免引入新的错误。 –

+0

我喜欢这个原理,它尚未落后于Sun数学库。我会尝试它的乐趣。是否有任何步骤需要与海湾合作委员会确保使用正确的库,而不是破碎的x86 hardwired cos/sin? –