Advertisement
Guest User

Untitled

a guest
Sep 21st, 2017
63
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.48 KB | None | 0 0
  1. package main
  2.  
  3. import (
  4. "fmt"
  5. "math"
  6. )
  7.  
  8. const eps = 1e-9
  9.  
  10. type ErrNegativeSqrt float64
  11.  
  12. func (e ErrNegativeSqrt) Error() string {
  13. e2 := fmt.Sprint(float64(e))
  14. return fmt.Sprintf("cannot Sqrt negative number: %v", e2)
  15. }
  16.  
  17. func Sqrt(x float64) (float64, error) {
  18.  
  19. if x < 0 {
  20. return 0, ErrNegativeSqrt(x)
  21. }
  22. z := 1.0
  23. p := z
  24.  
  25. for {
  26. z = z - (z*z-x)/(2*z)
  27. if math.Abs(z-p) < eps {
  28. break
  29. }
  30. p = z
  31. }
  32. return z, nil
  33. }
  34.  
  35. func main() {
  36. fmt.Println(Sqrt(2))
  37. fmt.Println(Sqrt(-2))
  38. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement