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>
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>
Witam!
W matematyce nie ma pierwiastka z liczby ujemnej.
Pomyłka są pierwiastki z liczb ujemnych ale tylko z nieparzystymi stopniami
Przepraszam! Pomyśle jak to zrobić.
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.
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
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 :(
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
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.
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
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
uzyj liczb zespolonych - wyciagniesz pierwiastek (np. kwadratowy) z dowolnej liczby - rowniez ujemnej