需要使用泰勒级数求余弦值:
迭代次数由用户指定。这是实现:
#include <stdlib.h>
#include <math.h>
int isCorrect(float actual, float target){
if (actual == target) return 1;
else return 0;
}
int Phactorial(int n){
int fact = 1;
for (int i = 1; i <= n; i++)
fact *= i;
return fact;
}
int main() {
system("chcp 1251");
double z;
int countIteration, countCorrectInput;
float result = 0;
printf("Приветствуем вас в программе подсчёта\n"
"cos(z) по итерационной формуле!\n"
"Введите через пробел z и точность (кол-во итераций):\n");
countCorrectInput = scanf("%lf%d", &z, &countIteration);
if (isCorrect(countCorrectInput, 2)){
for (int i = 0; i <= countIteration; i++){
result += pow(-1, i) *
pow(z, 2*i) / Phactorial(2*i);
}
printf("cos(z) = %f", result);
}
else{
printf("Введены некорректные значения");
}
return 0;
}
如果迭代次数小于 7,则程序会正确计算所有内容,但之后会产生不可能的值。帮助解决问题
我重复一遍。
14!,你有没有想过?适合吗
int
?顺便说一句,迭代次数不是精度,精度是级数最后一项的值,这是交替收敛级数的不变真理:)我找到了一分钟,这里是一个函数的代码,该函数使用级数以给定的精度计算余弦,并且
pow
根本不需要两个函数或阶乘的计算。对于较大的值,
x
最好不要直接使用它们,而是根据周期性,将它们缩小到较小的范围,例如[-π/2,+π/2]。