gpt4 book ai didi

计算余弦算法

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:31:15 25 4
gpt4 key购买 nike

我创建了这个函数 CalculateCos:

int Factorial (long int n)
{
long int r = 1;
for (int i = 2; i<=n; i++)
{
r = r*i;
}

return r;
}

float CalculateVariable(int CVnumber, int CVloopCounter)
{
float CVresult = 0;
CVresult = pow(CVnumber, (CVloopCounter*2)) / (long int)Factorial(CVnumber*2);

return CVresult;
}

float CalculateCos(int number)
{
float result = 1;
int loopCounter = 1;
int minusOrPlus = 1;
while(loopCounter <= precision && loopCounter <= 8)
{
if(!minusOrPlus)
{
result = result - CalculateVariable(number, loopCounter);
printf("%f\n", result);
minusOrPlus = 1;
}
else
{
result = result + CalculateVariable(number, loopCounter);
printf("%f\n", result);
minusOrPlus = 0;
}
loopCounter++;
}
return result;
}

我在减法或加法之后打印 f 的原因是因为它给了我奇怪的输出,比如:

Enter a number, for the cos function
6
1.000000
0.999997
1.000095
0.996588
1.122822
-3.421593
160.177368
-5729.385254
Result is: -5729.3852539
Official function result is: 0.9601703

你能帮我得到正确的结果吗?

更新:

现在我的解决方案是:

float CalculateCos(float number)
{
float result = 0;
float step = 1;
int loopCounter = 1;

while(loopCounter <= 5)
{
step = step * (-number) * number / (((2*loopCounter)-1)*((2*loopCounter)-2));
result += step;
loopCounter++;
}

return result;
}

最佳答案

当前问题:

因为你的Factorial函数返回 int然后将其转换为 long int , 它的结果甚至在输入进入 16 之前就会溢出在你的情况下(14!> max_int)。

您正在计算 cos使用泰勒级数:

cos(x) = 1 - x2/2! + x4/4! - x6/6! + ...

我不会写代码。但是你的程序有一些错误,可以很容易地修复:

  1. 输入的单位是弧度,所以number应该是 float .
  2. 分别使用求幂和阶乘计算泰勒级数的每一步很快就会溢出。正确的方法是维护一个 float变量:step = 1在第 kth 循环迭代中 step = step * (- x) * x / ((2*k-1)*(2*k)) .这样,您只需添加 stepresult在循环中,不需要 minusOrPlus不再。
  3. 循环迭代次数以8为界这太小了,所以结果可能不够精确。
  4. 我没看到你使用 precision任何地方的变量。它可以用来检查结果的精度。例如,当 abs(step) < precision ,我们将终止循环。

关于计算余弦算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8922168/

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