以下是https://tour.golang.org/flowcontrol/8解决此练习的两次尝试。一个版本将函数调用作为for条件的一部分,但这不起作用 - 它甚至不执行循环体。如果我在循环内移动条件,它就像我预期的那样工作。为什么呢?
package main
import (
"fmt"
"math"
)
func Sqrt_working(x float64) float64 {
var z float64 = 1.0
for {
if math.Abs((z*z) - x) < 0.0001 {
break
}
z -= ((z*z - x) / (2*z))
}
return z
}
func Sqrt_not_working(x float64) float64 {
var z float64 = 1.0
for math.Abs((z*z) - x) < 0.0001 {
z -= ((z*z - x) / (2*z))
}
return z
}
func main() {
fmt.Println(Sqrt_working(2))
fmt.Println(Sqrt_not_working(2))
}
输出
1.4142156862745099
1
答案 0 :(得分:5)
当循环停止时,if
条件正在发出信号,但当循环继续时,for
条件会发出信号。
要查看所需结果,请反转for
条件:
for math.Abs((z*z) - x) >= 0.0001 {
z -= ((z*z - x) / (2*z))
}