Неправильно вычисляется произведение ряда
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
double x, sm = 1;
int n;
cin >> n >> x;
for (int i = 1; i <= n; i++) {
sm *= (i/(i+1) - pow(cos(abs(x)), i));
}
cout.precision(6);
cout << fixed << sm << endl;
}
Я просто не понимаю, что у меня не так с кодом, чего только не перепробовал.
Ответы (2 шт):
Автор решения: Motilyok
→ Ссылка
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
double x, sm = 1;
int n;
cin >> n >> x;
for (double i = 1; i <= n; i++) {
sm *= (i/(i+1) - pow(cos(abs(x)), i));
}
cout.precision(6);
cout << fixed << sm << endl;
}
Деление должно быть не целочисленным
Автор решения: MBo
→ Ссылка
Целочисленное деление даёт ноль, нужно заставить выполняться вещественное. При этом индекс цикла не нужно делать вещественным.
for (int i = 1; i <= n; i++) {
sm *= (double(i)/(i+1) - pow(cos(abs(x)), i));
}
Кроме того, можно сделать небольшую оптимизацию - не потребуется на каждом шаге вычислять косинус и степень (тяжёлые операции)
double cospow = cosx = cos(abs(x);
for (int i = 1; i <= n; i++) {
sm *= (double(i)/(i+1) - cospow);
cospow *= cosx;
}