Я пытаюсь остановить цикл for, если выполнены два условия.счетчик n
не дает мне проблемы.В принципе, я бы хотел, чтобы цикл прекратил работать после того, как totalSum
станет равным самому себе (или в пределах определенной границы) после запуска цикла. Я новичок в программировании и новичок в этом сайте, поэтому заранее прошу прощения .для целей тестирования от имени кого-либо, я включу код целиком.
Я предоставлю дополнительную информацию здесь .мой код работает как следует, хотя во время цикла вычисляемые значения становятся слишком большими, и я получаю что-то, говорящее nan
или inf
.после распечатки totalSum
и тому подобное.Я вижу, что получаю значение (правильное вычисление синуса), повторенное один или два раза, но после этого число продолжает увеличиваться или уменьшаться циклом.Как только мой цикл окончательно завершается через 100 раз, я получаю вышеупомянутую nan
/ inf
.
long double sine(double x)
{
long double totalSum = 0.0;
for(int n = 0; n < 100; ++n)
{
int plusOrMinusSign = pow(-1, n);
long double num = pow(x,(2 * n + 1));
long double den = factorialtest(2 * n + 1);
totalSum += (plusOrMinusSign * num / den);
cout <<plusOrMinusSign<<" "<< x << "^" <<(2*n+1) <<"/"<< (2 * n + 1)<<"! = " << totalSum <<endl; //testing purposes
}
return totalSum;
}
всю программу ниже
#include <iostream>
#include <cmath> //used for pow indicated in comment with "^"
#include <iomanip>
using namespace std;
long int factorialtest(int x) //calculates factorial
{
long int factorialNum = 1;
for(int count = 1; count <= x; count++)
factorialNum = factorialNum * count;
return factorialNum;
}
long double sine(double x)
{
long double totalSum = 0.0;
for(int n = 0; n < 100; ++n)
{
int plusOrMinusSign = pow(-1, n);
long double num = pow(x,(2 * n + 1));
long double den = factorialtest(2 * n + 1);
totalSum += (plusOrMinusSign * num / den);
cout <<plusOrMinusSign<<" "<< x << "^" <<(2*n+1) <<"/"<< (2 * n + 1)<<"! = " << totalSum <<endl; //testing purposes
}
return totalSum;
}
double cosine(double x) //returns cos of x
{
double totalSum = 0;
for(int n = 0; n < 100; n = n + 2)
{
double num = pow(x,(n)); // ^ used pow here, does the power of x to the n value above
double den = factorialtest(n); //used my own factorial program here, multiplies n by factorial of n
totalSum = totalSum + ( num / den);
}
return totalSum = 0;
}
double tangent(double x) { //returns tangent
return sine(x) / cosine(x);
}
double secant(double x) { //returns secant
return 1 / cosine(x);
}
double cosecant(double x) { //returns cosecant
return 1 / sine(x);
}
double cotangent(double x) { //returns cotangent
return 1 / tangent(x);
}
int main() {
double x;
cout << "Input number to find sine: ";
cin >> x;
cout << "Sine of " << x << " is " << sine(x) << endl;
}
Кстати, программа вычисления радиан.Пример того, что происходит ниже, используя 1 для х.«Синус (1)»
-1 1^63/63! = 0.841471
1 1^65/65! = 0.841471
-1 1^67/67! = -inf
После определенного момента это дает мне это.Спасибо за ваше время.