昨日からA Tour Of Goをはじめました。
皆さんオリジナル(英語版)をやって見るようにと進めてくれているのですが、まずは日本語を進めています。
そして早速Exercise: Loops and Functionsでつまづきました。
書いてあることが全くわからず飛ばそうかと思ったのですが、何度も読み返してようやく意味がわかりました。
ループ内でz -= (zz - x) / (2z)を実行してzと前回実行時のzの差が一定値以下になったらループを抜けるということだと思いとりあえず書いてみました。
package main
import (
"fmt"
"math"
)
func Sqrt(x float64) float64 {
z := 1.0
n := 0.0
for i := 0; i < 10; i++ {
z -= (z*z - x) / (2 * z)
if math.Abs(z-n) < 0.0000001 {
return z
}
n = z
}
return z
}
func main() {
x := 2.0
fmt.Println(Sqrt(x))
fmt.Println(math.Sqrt(x))
}
結果
1.4142135623730951
1.4142135623730951
答えがわからないのですが、大きく外していないことをお祈り。