C++. Как избавиться от nan?
В задании нужно вычислить ln (tg x) с обработкой исключительных ситуаций. Вот код:
#include <iostream>
#include <math.h>
#include <time.h>
#include <cstdlib>
using namespace std;
int main()
{
srand(time(0));
for(int i = 0; i<50; i++)
{
try
{
int temp = rand()%41 - 20; // x від -20 до 20
for(int n = -7; n < 7; n++)
{
double k, t;
k = 3.14*n;
t = (3.14/2) + (3.14*n);
if((temp <= k)&&(temp >= t))
throw (double)temp;
}
cout << "x = " << temp << "\t" << "y = ";
cout << log(tan(temp)) << endl; //ln(tg(x))
}
catch(double a)
{
cout << "x does not belong to the domain of a function: ";
cout << a;
}
}
}
При компиляции временами выдаёт nan в y. Я в принципе возможно догадываюсь где ошибка (из-за for(int n = -7; n < 7; n++) выкидывает несколько "вариантов" temp потому catch не реагирует? ну, или ошибка где-то ещё), но никак не могу придумать её решение. Помогите, пожалуйста. Я начинающий, так что прошу пояснения подетальнее или хотя бы пример кода, как это можно исправить.
Ответы (1 шт):
Автор решения: Mikhailo
→ Ссылка
Может, заменить
cout << "x = " << temp << "\t" << "y = ";
cout << log(tan(temp)) << endl; //ln(tg(x))
на
if (tan(temp) > 0) {
cout << "x = " << temp << "\t" << "y = ";
cout << log(tan(temp)) << endl; //ln(tg(x))
}
else throw double(temp);
?