Run Code
|
API
|
Code Wall
|
Misc
|
Feedback
|
Login
|
Theme
|
Privacy
|
Patreon
Pierwiastkowanie
//Pierwiastkowanie template<typename T> auto potega(const T podstawa, const unsigned wykladnik=2){ T wynik=1; for(unsigned i=1; i<=wykladnik; ++i) wynik*=podstawa; return wynik; } double _root(const double pod, const unsigned stopien, const bool rezultat=0){ double przedzial[2]; if(pod < 1) (przedzial[0]=0), (przedzial[1]=1); else (przedzial[0]=1), (przedzial[1]=pod); for(;;){ double mid = (przedzial[0]+przedzial[1]) / 2; double mid2= potega(mid, stopien); if(mid2 == pod) return przedzial[rezultat]; bool kraniec = mid2 > pod; if(mid == przedzial[kraniec]) return przedzial[kraniec]; przedzial[kraniec] = mid; } } #include <stdexcept> double real_root(const double pod, const unsigned stopien=2, const bool rezultat=0){ if(stopien == 0) return 0.; if(stopien == 1) throw std::invalid_argument("stopien nie moze byc rowny 1"); if(pod < 0) if(stopien%2) throw std::invalid_argument("Pierwiastek ujemnego stopnia liczby ujemnej nie jest liczba rzeczywista."); else return -_root(-pod, stopien, rezultat); else return _root(pod, stopien, rezultat); } #include <complex> std::complex<double> root(const double pod, const unsigned stopien=2, const bool rezultat=0){ if(stopien < 2) throw std::invalid_argument("stopien musi byc nie wiekszy niz 2"); if(pod < 0) return _root(-pod, stopien, rezultat) * (stopien%2)? -1 : std::complex<double>(0, 1); else return _root(pod, stopien, rezultat); } #include <iostream> int main(){ double pod; unsigned stopien; while(std::cin >> pod >> stopien){ try { std::cout << root(pod, stopien) << '\n'; } catch(std::exception& e){ std::cout << e.what() << '\n'; } } }
run
|
edit
|
history
|
help
0
DayTempEnum
decrypt_problem_5
queue
extern
MACRO
rotation
Bad Code2
2015(M2)Simulare
Articulation and Bridges
find first non repeating