Это вопрос домашней работы, который я недавно пересмотрел. Это требует от меня не использовать cmath
и записывает функцию для оценки cos pi/3
. КодПочему for-loop ведет себя по-разному при подсчете против счета?
#include <iostream>
using namespace std;
double power(double x, int b) {
if (b>1) return x*power(x,b-1);
else if (b==0) return 1;
else return x;
}
double cosine(double x, int k) {
double tmp=0;
for (int n=0; n<=k; n++) {
tmp += power(-1,n)/factorial(2*n) * power(x,2*n);
}
return tmp;
}
int main() {
double x=3.1415/3;
int k=100;
cout << cosine(x,k) << endl;
}
Я написал две версии double factorial(int a)
с для петель.
Один подсчитывает и успешно выводит 0.500027
:
double factorial(int a) {
double tmp=1;
for (int i=1; i<=a; i++) {
tmp*=i;
}
return tmp;
}
Другой отсчитывает и выходы inf
(но успешно оценивают 4 = 24!):
double factorial(int a) {
double tmp=a;
for (int i=a; i>=1; i--) {
tmp*=i;
}
return tmp;
}
Почему отсчет петля не дает сходящийся выход?
Работает для 'double tmp = 1;', но все же 'inf' для' int i = a-1'. Зачем? – user2513881
@ user2513881 Попробуйте проверить 'factorial()' без использования 'cosine()'. – MikeCAT
'factorial (10)' дает 3.6288e + 06. Но да, 'factorial (0)' является проблемой и вызывает «деление на ноль», когда n = 0 в for-loop 'cosine (x, k)'. – user2513881