"Не число" NaN при вычислении кубического корня через Math.Pow

введите сюда описание изображения

using System;

namespace дом_работа
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.Write(" Введите значение x = ");
            double x = Convert.ToDouble(Console.ReadLine());
            Console.Write(" Введите значение y = ");
            double y = Convert.ToDouble(Console.ReadLine());
            double Sum = Math.Pow(Math.Sin(Math.Pow(x * y - Math.Pow(x, y), 2)), 2) - Math.Pow(1 - (Math.Pow(x, 2)), 1.0 / 3.0);
            Console.WriteLine($"sin^2(x*y-x^y)^2-√^3(1-x^2)= {Sum:F3}");
            Console.ReadKey();
        }
    }
}

почему-то из за кубического корня возникают проблемы, так как если x будет больше 1 то программа выводит в консоль не число, в чем может быть проблема ?


Ответы (1 шт):

Автор решения: aepot

Насколько я в курсе, Math.Pow(x, y) для не целого y реализован так exp(y * ln(x)), где ln(x) при x <= 0 вычислить нельзя, потому что математически результат - комплексное число. У вас x = -3, y = 1/3.

Попробуйте так

double z = 1 - Math.Pow(x, 2);
double Sum = Math.Pow(Math.Sin(Math.Pow(x * y - Math.Pow(x, y), 2)), 2) - Math.Pow(Math.Abs(z), 1.0 / 3.0) * (z < 0 ? -1 : 1);
Введите значение x = 2
Введите значение y = 3
sin^2(x*y-x^y)^2-√^3(1-x^2)= 2,015
→ Ссылка