Skip to content

Instantly share code, notes, and snippets.

@satyrius
Created October 23, 2013 06:33
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save satyrius/7113518 to your computer and use it in GitHub Desktop.
Save satyrius/7113518 to your computer and use it in GitHub Desktop.
A Tour of Go. Exercise: Errors. Copy your Sqrt function from the earlier exercises and modify it to return an error value. Sqrt should return a non-nil error value when given a negative number, as it doesn't support complex numbers. Create a new type type ErrNegativeSqrt float64 and make it an error by giving it a func (e ErrNegativeSqrt) Error(…
package main
import (
"fmt"
)
type ErrNegativeSqrt float64
func (e ErrNegativeSqrt) Error() string {
return fmt.Sprintf("cannot Sqrt negative number: %v", float64(e))
}
func Sqrt(f float64) (float64, error) {
if f < 0 {
return 0, ErrNegativeSqrt(f)
}
z := 1.0
for i := 1; i <= 10; i++ {
z = z - (z * z - f) / (2 * z)
}
return z, nil
}
func main() {
fmt.Println(Sqrt(0.04))
fmt.Println(Sqrt(2))
fmt.Println(Sqrt(4))
fmt.Println(Sqrt(-2))
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment