gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 17:43:54 24 4
gpt4 key购买 nike

我有一份C语言的作业,我们必须自己写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. 关于数学:您正在编码的级数展开是一个正弦逆 (arcsin),并期望以弧度为单位的输出。

    sin^(-1)x=x+1/6x^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.关于 float ( double 即单精度 float ):它们不能表示实线上的所有数字,它们的范围是R的子集。并且当有一个数字不能正确表示时他们的 32 位编码(IEEE 754)你会得到错误的结果。像0.1这样简单的数字都无法用 float 精确表示。

    检查这些页面是否存在 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

关于c - 当使用更多迭代时,C 中的 asin() 函数返回 NaN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20162641/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com