[C++ Builder] pierwiastek z liczby ujemnej

0

Jak obliczyć pierwiastek nieparzystego stopnia z liczby ujemnej? Próbowałem zrobić to tak:

float wynik = pow(-27.0, 1.0/3);

ale zgłasza błąd.

Pozdrawiam</cpp>

0

Witam!

W matematyce nie ma pierwiastka z liczby ujemnej.


www.hardheads.prv.pl

Pomyłka są pierwiastki z liczb ujemnych ale tylko z nieparzystymi stopniami
Przepraszam! Pomyśle jak to zrobić.

0

Jak obliczyć pierwiastek nieparzystego stopnia z liczby ujemnej? Próbowałem zrobić to tak:

float wynik = pow(-27.0, 1.0/3);

ale zgłasza błąd.

Pozdrawiam</cpp>

Od kiedy 1/3 jest nieparzystym stopniem? W liczbach rzeczywistych (-27)^(1/3) nie ma sensu.

pzdr,

y.

0

W matematyce nie ma pierwiastka z liczby ujemnej.

Jak to nie ???
Jak nie wiesz to nie wprowadzaj w błąd.
Twierdzisz, że nie da się rozwiązać tego równania?
x^2 = -1

Od kiedy 1/3 jest nieparzystym stopniem?

Od zawsze?
x^(1/3) to pierwiastek trzeciego stopnia z x

0

Od kiedy 1/3 jest nieparzystym stopniem? W liczbach rzeczywistych (-27)^(1/3) nie ma sensu.

pzdr,

y.

Pierwiastek jest stopnia nieparzystego. Jezeli podnosisz do potegi 1/n to jest to samo co pierwiastek n-tego stopnia. Skoro tam jest 3, to 3 jest jak najbardziej nieparzyste.

Ja niestety tez nie pomoge :( Spotkalem sie z tym problemem oprogramowujac FPU w asm. Niestety blad mi wywalalo :(

0

Witam

Nie wiem czy podchodzi to pod definicje pierwiastka ale:

założenia:
Jeżeli n należy do naturalnych i jest liczbą nieparzystą to dla a nalerzącego do rzeczywistych :
to:
pierwiastek n-tego stopnia z a wynosi b.

Kod:

//---------------------------------------------------------------------------
#include<iostream.h>
#include<math.h>
//---------------------------------------------------------------------------
double pierwiastek(int stopien_pierw,double liczba_podpierw)
{
  int mnoznik=1;
  if( stopien_pierw >= 0)
    {
     if(liczba_podpierw < 0 )
       {
         if( (stopien_pierw % 2) ) //stopien nieparzysty
           {
             mnoznik=-1;
             liczba_podpierw=fabs(liczba_podpierw);//moduł
           }
         else
           {
             printf("blad nieprawidlowy stopien pierwiastka");
             return 0;
           }
       }

       return mnoznik*exp(log(liczba_podpierw)/stopien_pierw);

    }
  else
    printf("blad nieprawidlowy stopien pierwiastka");
    return 0;
}
int main()
{
  double wynik;
  wynik=pierwiastek(5,-1024);
  if(wynik)
    printf("%f",wynik);
  cin.get();
        return 0;
}
//---------------------------------------------------------------------------

Nie testowałem do końca,ale powinno działać.

Pozdrawiam

0

Mea culpa. Trzeba mi mniej kawy i więcej snu ;> Anyway (-27)(1/3) sens ma. Dla nieparzystych wykładników xy = sgn(x) * pow(abs(x),y) powinno rozwiązać sprawę.

pzdr,

y.

0

Dzięki Rafal. Trochę uprościłem twój program i w rezultacie wyszło coś takiego:

double pierwiastek(double n, double x)
{
  return x>0 ? _fm_exp(_fm_log(x)/n) : (x<0 ? -_fm_exp(_fm_log(-x)/n) : 0);
}

Funkcja działa jak należy, także dla ujemnych x, tylko n MUSI BYĆ liczbą całkowitą nieparzystą.

Pozdrawiam

0

Dzięki Rafal. Trochę uprościłem twój program i w rezultacie wyszło coś takiego:

double pierwiastek(double n, double x)
{
  return x>0 ? _fm_exp(_fm_log(x)/n) : (x<0 ? -_fm_exp(_fm_log(-x)/n) : 0);
}

Funkcja działa jak należy, także dla ujemnych x, tylko n MUSI BYĆ liczbą całkowitą nieparzystą.

Pozdrawiam

Pomyłka, funkcja działa dla każdego n różnego od 0.

Pozdrawiam

0

uzyj liczb zespolonych - wyciagniesz pierwiastek (np. kwadratowy) z dowolnej liczby - rowniez ujemnej

1 użytkowników online, w tym zalogowanych: 0, gości: 1