Подскажите, что не так? Выдает a = -nan(ind)

Рейтинг: 0Ответов: 1Опубликовано: 22.05.2023

Условие

#include <iostream>
#include <cmath>
using namespace std;

const double P = 3.14159265;

double calculateA(double x, double y, double z) 
{
double z1 = fabs(P * z / 180 - 1);
double a = (8.01 * pow(sin(3 * x * P / 180), 2) - exp(-2 * z)) / (pow(sqrt(log(y)), 1.0 / 3) + 2 * z);
return a;
}

double calculateB(double y) 
{
double b = std::pow(y, 1.0 / 3) - 5 * y;
return b;
}

int main() {
setlocale(LC_ALL, "Russian");
double x, y, z;

cout  << "Введите значение x (в градусах): ";
cin >> x;

cout << "Введите значение y: ";
cin >> y;

cout << "Введите значение z: ";
cin >> z;

double a = calculateA(x, y, z);
double b = calculateB(y);

cout << "a = " << a << endl;
cout << "b = " << b << endl;

return 0;
}

Ответы

▲ 4

Судя по приведенной таблице, y = 0.95, логарифм этого числа отрицательный, а вы из него пытаетесь взять квадратный корень pow(sqrt(log(y)), 1.0 / 3) — кстати, зачем? Вы же тут попытались получить корень шестой степени из, кстати, натурального логарифма, в то время как в задании — корень кубический из десятичного логарифма...

Математически кубический корень из отрицательного числа вполне допустим, но вот вычислять его через pow нельзя — тогда надо самостоятельно разбираться со знаками. Но лучше воспользоваться специальной функцией вычисления кубического корня cbrt, которая все это отлично сделает сама.