선수로 산다, 때론 좋은 코치로

[golang] A Tour of Go - 56 연습 문제 본문

개발 관련/go

[golang] A Tour of Go - 56 연습 문제

godsman 2018. 2. 12. 21:38

[golang] A Tour of Go - 56 연습 문제

https://go-tour-kr.appspot.com/#55


당신의 Sqrt 함수를 이전 연습에서 복사하고 error 값을 반환하도록 수정하십시오. 

Sqrt 함수는 복소수를 지원하지 않기 때문에, 음수가 주어지면 nil 이 아닌 에러 값을 반환해야 합니다. 

새로운 타입을 만드십시오. 

type ErrNegativeSqrt float64

and make it an error by giving it a 그리고 아래 메소드를 구현함으로써 그 타입이 error 가 되게 하십시오. 

func (e ErrNegativeSqrt) Error() string

이는 ErrNegativeSqrt(-2).Error() 가 "cannot Sqrt negative number: -2" 를 반환하는 그러한 메소드입니다. 

뉴턴 방법의 제곱근에서 초기값은 1로 설정하고, 5번 정도 반복하면 근사값을 구할 수 있다.


package main

import (
"fmt"
)

type ErrNegativeSqrt float64

func (e ErrNegativeSqrt) Error() string {
return fmt.Sprintf("cannot Sqrt negative number: %f", e)
}

func Sqrt(x float64) (float64, error) {
if x < 0 {
return 0, ErrNegativeSqrt(x)
}
z := 1.0

for i:=0; i<5; i++ {
z = z - (z * z - x) / (2 * z)
}

return z, nil
}

func main() {
fmt.Println(Sqrt(2))
fmt.Println(Sqrt(-2))
}


Comments