当使用更多迭代时,C中的asin()函数返回NaN

时间:2013-11-23 13:05:07

标签: c

我在C中做了一个功课。我们必须用Taylor方法编写我们自己的asin()函数,我们不能使用math.h

它工作正常,但是一旦我将iterations(int i)的更高数量,它返回NaN(非数字),当我使用i的低数量时,数字不是精确。任何人都可以帮我这个吗?

double my_asin(double x)
{
    int i = 0;
    double vypocet = x;
    double y = vypocet;
    for(i=1;i<=10000;i++)
    {
        vypocet*=((x*x)*(2*i-1)*(2*i-1))/((2*i)*(2*i+1));
        y+=vypocet;

    }
    printf("my_asin = %.10e\n", y);
    return y;
}
编辑:谢谢大家!完了它:))

1 个答案:

答案 0 :(得分:0)

你的答案需要两件事:

  1. 关于数学:你编码的系列扩展是一个sin逆(arcsin)并期望以弧度输出。

    罪^( - 1)X = X + 1/6×^ 3 + 3 /(40)的x ^ 5 + 5 /(112)的x ^ 7 +(35)/(1152)的x ^ 9 + .. ......正如您所看到的,这是一个单调递增的扩展,并期望[-1,1]之间的值(输入)。插入大值时,例如10你必然得到你不期望的结果。所以,插入正确的值。我想,在调用函数my_asin()时输入正确的值[-1,1],你的代码可以正常使用你现在的迭代次数。

    例如1.5146343691e + 000看起来很好90度或pi / 2或my_asin(1)。

    2.Regarding Floating Point(双重即单精度浮点):它们不能表示实线上的所有数字,它们的范围是R的子集。当有一个无法正确表示的数字时他们的32位编码(IEEE 754)您将得到结果错误。 简单到0.1的数字不能用浮点精确表示。

    检查这些页面是否存在FP错误和FP异常:

  2. http://www.gnu.org/software/libc/manual/html_node/Infinity-and-NaN.html
  3. http://www.gnu.org/software/libc/manual/html_node/FP-Exceptions.html#FP-Exceptions