a solution to https://tour.go-zh.org/methods/9
package main
import (
"fmt"
)
func Sqrt(x float64) (float64, error) {
var err ErrNegativeSqrt
var z float64
if x < 0 {
err = ErrNegativeSqrt(x)
return z, err
} else {
z = x
for i := 0; i < 10; i++ {
z = z - (z*z-x)/(2*z)
}
return z, nil
}
}
type ErrNegativeSqrt float64
func (e ErrNegativeSqrt) Error() string {
return fmt.Sprintf("cannot Sqrt negative number: %f", float64(e))
}
func main() {
fmt.Println(Sqrt(2))
fmt.Println(Sqrt(-2))
}