ďťż

Ładny brzuch

Witam, mam pytanie. Jak w C++ obliczyć pierwiastek z danej liczby? Proszę o poradę!



Powinno wystarczyć:
http://www.cplusplus...cmath/sqrt.html

operatorem sqrt z biblioteki math.h :)
Użytkownik gates22 edytował ten post 16 kwiecień 2008, 14:18
Przy pierwiastkach innych niż kwadratowe:
Pierwiastek B z liczby A to A podniesione do potęgi 1/B.

#include <cmath> double root(double a, double b) { return pow(a, 1/b); }



Pasowałoby jeszcze dodać warunek jakiś bo funkcja może się pięknie wykrzaczać.

Hm, powiedzmy...
double root(double a, double b) { if (b % 2 == 0 && a < 0) throw ValueError; //parzyste b, ujemne a if (b == 0) throw ValueError; //zerowe b return pow(a, 1/b); }
Takie coś będzie poprawne?


Przy pierwiastkach innych niż kwadratowe:
Pierwiastek B z liczby A to A podniesione do potęgi 1/B.


chcesz powiedziec, ze np. pierwiastek z A to nie jest to samo co A do potegi 1/2 ?? <_<
skad zes taki warunek wytrzasnal??

Koledzy wyżej podali linki do sqrt(), zatem należy mój post zrozumieć:
"Jeśli chcesz liczyć pierwiastki nie tylko kwadratowe, to zastosuj się do regułki:
Pierwiastego n-tego stopnia z A, to A podniesione do potęgi 1/n.
Tutaj następuje definicja funkcji, która już liczy na podstawie tej regułki."

;-) Po prostu wyrwałeś moje zdanie z kontekstu.

no tak, tyle ze potem spojrzalem na Twoj nastepny post:
if (b % 2 == 0 && a < 0) throw ValueError; //parzyste b, ujemne a

gdzie ewidentnie potwierdzasz co napisalem...


no tak, tyle ze potem spojrzalem na Twoj nastepny post:
if (b % 2 == 0  &&  a < 0) throw ValueError; //parzyste b, ujemne a

gdzie ewidentnie potwierdzasz co napisalem...

Jak dla mnie to ten kawałek kodu zapobiega przed próbą policzenia pierwiastka o stopniu parzystym z liczby ujemnej (bo takie w liczbach rzeczywistych nie istnieją). Nie ma wiele wspólnego z pierwiastkiem kwadratowym z dodatniej liczby.

omg :blink: fakt

to ja juz moze sie nie odzywam, zwracam honor pbnan
to chyba ta pogoda :P

Jedną ze znanych metod jest obliczanie pierwiastka metodą Herona i wygląda to mniej więcej tak:
#include <iostream> #include <math.h> using namespace std; int main() { float a; // zmienna - liczba podpierwiastkowa float e; // zmienna - dokładność float x1; // zmienna - przybliżenie float x2; // zmienna pomocnicza - przybliżenie float kontrola1, kontrola2, kontrola3; // zmienne pomocnicze dla warunków cout << "Program oblicza pierwiastek metoda Herona" << endl; cout << "Podaj liczbe podpierwiastkowa: "; cin >> a; // wprowadzenie liczby podpierwiastkową while (a<=0) // liczba nie może być mniejsza bądź równa zero { cout << "Podaj liczbe podpierwiastkowa: "; cin >> a; } cout << "Podaj dokladnosc (pamietaj o uzyciu kropki dziesietnej!): "; cin >> e; // wprowadzenie liczby określającej dokładność while (e<=0) // liczba nie może być mniejsza bądź równa zero { cout << "Podaj dokladnosc (pamietaj o uzyciu kropki dziesietnej!): "; cin >> e; } x1=a; kontrola1=abs(x1*x1-a); // definiowanie zmniennych pomocniczych kontrola2=abs(a/x1)+x1; // definiowanie zmiennych pomocniczych kontrola3=2*e; // umożliwienie "wejścia" w pętlę while while (kontrola1>e && kontrola2>e && kontrola3>e) //sprawdzenie warunków { x2=((a/x1)+x1)/2; // definiowanie przybliżenia "pomocniczego" kontrola1=abs(x2*x2-a); //zmiana definicji zmiennych pomocniczych: kontrola2=abs(x2-x1); // kontrola 1, kontrola 2; kontrola 3 kontrola3=abs((a/x2)-x2); x1=x2; } cout << "\nPierwiastek liczby " << a << " wynosi: " << x1 << endl << endl; system("pause"); return 0; }

  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • zsf.htw.pl
  •