// Copyright 2009 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package math


/*
 *	sqrt returns the square root of its floating
 *	point argument. Newton's method.
 *
 *	calls frexp
 */

// Sqrt returns the square root of x.
//
// Special cases are:
//	Sqrt(+Inf) = +Inf
//	Sqrt(0) = 0
//	Sqrt(x < 0) = NaN
func Sqrt(x float64) float64 {
	if IsInf(x, 1) {
		return x
	}

	if x <= 0 {
		if x < 0 {
			return NaN()
		}
		return 0;
	}

	y, exp := Frexp(x);
	for y < 0.5 {
		y = y * 2;
		exp = exp - 1;
	}

	if exp&1 != 0 {
		y = y * 2;
		exp = exp - 1;
	}
	temp := 0.5 * (1 + y);

	for exp > 60 {
		temp = temp * float64(1<<30);
		exp = exp - 60;
	}
	for exp < -60 {
		temp = temp / float64(1<<30);
		exp = exp + 60;
	}
	if exp >= 0 {
		exp = 1 << uint(exp/2);
		temp = temp * float64(exp);
	} else {
		exp = 1 << uint(-exp/2);
		temp = temp / float64(exp);
	}

	for i := 0; i <= 4; i++ {
		temp = 0.5 * (temp + x/temp)
	}
	return temp;
}
