fork(1) download
  1. #include <iostream>
  2. #include <cmath> // dla std::abs
  3.  
  4. // Funkcja do obliczania pierwiastka kwadratowego metodą Newtona-Raphsona
  5. double sqrtNewton(double x, double epsilon = 1e-6) {
  6. if (x < 0) {
  7. std::cerr << "Błąd: liczba ujemna!" << std::endl;
  8. return -1; // nie można liczyć pierwiastka z liczby ujemnej
  9. }
  10. if (x == 0) return 0;
  11.  
  12. double y = x; // początkowe przybliżenie
  13. while (true) {
  14. double y_next = 0.5 * (y + x / y);
  15. if (std::abs(y_next - y) < epsilon) // warunek zbieżności
  16. break;
  17. y = y_next;
  18. }
  19. return y;
  20. }
  21.  
  22. int main() {
  23. double liczba;
  24. std::cout << "Podaj liczbę dodatnią: ";
  25. std::cin >> liczba;
  26.  
  27. double wynik = sqrtNewton(liczba);
  28. std::cout << "Przybliżony pierwiastek kwadratowy: " << wynik << std::endl;
  29. std::cout << "Dla porównania, std::sqrt daje: " << std::sqrt(liczba) << std::endl;
  30.  
  31. return 0;
  32. }
  33.  
Success #stdin #stdout 0s 5324KB
stdin
16
stdout
Podaj liczbę dodatnią: Przybliżony pierwiastek kwadratowy: 4
Dla porównania, std::sqrt daje: 4