diff --git a/exercises/00-sqrt/go.go b/exercises/00-sqrt/go.go index 4aa0bd2..6a9f8e9 100644 --- a/exercises/00-sqrt/go.go +++ b/exercises/00-sqrt/go.go @@ -7,7 +7,17 @@ import ( const min_threshold = 1e-200 -func Sqrt(x float64, threshold float64) (z float64, iterations int) { +type ErrNegativeSqrt float64 + +func (e ErrNegativeSqrt) Error() string { + return fmt.Sprintf("cannot Sqrt negative number: %v", float64(e)) +} + +func Sqrt(x float64, threshold float64) (z float64, iterations int, err error) { + if x < 0 { + err = ErrNegativeSqrt(x) + return + } z = x old_z := z for { @@ -25,7 +35,10 @@ func main() { threshold := 1.0 right_answer := math.Sqrt(2) for threshold > min_threshold { - answer, iterations := Sqrt(2, threshold) + answer, iterations, err := Sqrt(2, threshold) + if err != nil { + panic(err) + } fmt.Printf("%0.4g %0.4g %0.20f %0.20f %0.2d\n", threshold, right_answer-answer, right_answer, answer, iterations)