Как исправить ошибку -nan(ind) в С++?

При подсчёте формулы есть некие условия, неисполнение которых переменная result типа double должна преобразоваться в строковую и выводить вместо результата ошибку - Calculation error. Выводится -nan(ind), в чем проблема?

65b2185b9ed0c174985135.png

double calculateExpression(double x) {
    double result = 0;
    if (x != 95 && cos(x - 95) != 0 && 95 / cos(x - 95) != 0) {
        result = log(abs(95 / 10) + 4 * (1 - 95 / cos(x - 95))*(sin(x)/95));
    }
    else {
        std::string str = std::to_string(result);
        std::cout << "Calculation error" << result << std::endl;
    }
    return result;
}


Немного исправил, но ошибка осталась та же
double calculateExpression(double x) {
    double result = 0;
    result = log(abs(95 / 10) + 4 * (1 - 95 / cos(x - 95)) * (sin(x) / 95));
    if (((sin(x) / 95) == 0 && (1 - 95 / cos(x - 95)) == 0 && cos(x - 95)) && log(abs(95 / 10) + 4 * (1 - 95 / cos(x - 95)) * (sin(x) / 95)) < 0 && result == 0) {
        std::string str = std::to_string(result);
        std::cout << "Calculation error" << result << std::endl;
        return result;
    }
    return result;
}
  • Вопрос задан
  • 262 просмотра
Решения вопроса 1
wataru
@wataru Куратор тега C++
Разработчик на С++, экс-олимпиадник.
Это значение - это результат какого-то запрещенного математического действия. Деление на 0, например. Но на него вы, вроде как, проверяете.

Другая опасность в вашем коде: логарифм отрицательных чисел. Закомментируйте log в вашем выражении, если результат где-то отрицательный - функцию в этом значении x тупо не вычеслить - оно вне области определения.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Gremlin92
@Gremlin92
Целеустремленный
double x;
...
1 - 95 / cos(x - 95)

У вас наверное происходит деление на ноль, потому что нельзя сравнивать double x с целым 95 и double cos(x - 95) с целым нулем
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы