Update sqrt_double.cpp

This commit is contained in:
DarkWarrior703 2020-04-25 16:25:00 +03:00 committed by GitHub
parent 878dc0bf6c
commit d4ab125657
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -5,39 +5,34 @@
number in O(logn) time,
with precision fixed */
double Sqrt(double x)
{
double Sqrt(double x) {
double l = 0, r = x;
/* Epsilon is the precision.
A great precision is
between 1e-7 and 1e-12.
double epsilon = 1e-12;
*/
while( l <= r )
{
while ( l <= r) {
double mid = (l + r) / 2;
if( mid * mid > x )
{
if ( mid * mid > x ) {
r = mid;
}
else
{
if( x - mid * mid < epsilon )
{
else {
if ( x - mid * mid < epsilon ) {
return mid;
}
l = mid;
}
}
return -1;
}
int main()
{
int main() {
double n{};
std::cin >> n;
assert(n >= 0);
//Change this line for a better precision
// Change this line for a better precision
std::cout.precision(12);
std::cout << std::fixed << Sqrt(n);
}