Proszę o pomoc, mianowicie muszę w pewnym programie użyć funkcji pow (biblioteka math.h) aby znaleźć wartość pierwiastka pewnej liczby (stopień pierwiastka jest większy niż 2).
W wielkim uproszczeniu mam coś takiego:
int ile;
int liczba;
int wynik;
wynik=pow(liczba,(1/ile);
Program kompiluje sie i uruchamia ale przy próbie uruchomienia ostatniego polecenia (używam C++ Builder 6 Personal) wywala mi okienko z błędem “POW: domain error” . Przyjaciel Google powiedział że to może być problem z typem zmiennych jednak próbowałem chyba wszystkich kombinacji i nic z tego . Jeżeli spotkał sie ktoś czymś takim proszę o pomoc
Ewentualnie jeżeli jest jakiś inny sposób na obliczanie pierwiastków wyższych stopni;) też byłbym wdzięczny
Jeżeli to C++ to powinno być a nie jak w C. Piszę powinno być, bo jak to jest w tym kompilatorze to nie wiem. Tu jest dokumentacja C++: http://www.cppreference.com/
Czy u ciebie te zmienne mają poprawne wartości? Zwracam uwagę, że tam powinny być wartości double, tzn. liczba zostanie zrzutowana, ale przy wykładniku trzeba by było napisać 1.0 / stopien.
Masz dzielenie 1/ile gdzie ile jest typu int, a powinien być jakiś typ zmiennoprzecinkowy. Wynik takiego dzielenia w większości przypadków nie da liczby całkowitej (czyli int) ;]
Funkcja pow z biblioteki cmath przyjmuje dwa argumenty: podstawę i wykładnik potęgi - oba typu double.
wynik=pow(liczba,(1/ile);
Funkcja ta zwraca też typ double, w związku z czym przy przypisaniu do zmiennej wynik (typu int) zostanie wykonana niejawna konwersja, w rezultacie której dojdzie do zaokrąglenia (np. z 4.323412 do 4). Zmienna ile jest typu int, takiego typu jest też stała dosłowna 1. Dzielenie inta przez int zawsze zwraca wynik będący liczbą całkowitą - w tym wypadku dla ile > 1 zawsze będzie to 0. Powinno zadziałać po zmianie typu zmiennych na double. Edit: pomijam już, że jest tu błąd, jeśli chodzi o nawiasy. Powinno być: