英文:
"declared and not used" Error
问题
我得到一个错误,说我没有使用一个变量...但在我这个新手的眼里,看起来我是在使用它:
func Sqrt(x float64) float64 {
z := float64(x);
for i := 0; i < 10; i++ {
z := z - (z*z - x) / (2 * z);
}
return z;
}
有人能指出我对语言的理解有什么问题吗?我认为这与=
和:=
以及作用域有关,但我不确定。
英文:
I get this error saying that I'm not using a variable… but to my noob eyes, it looks like I am:
func Sqrt(x float64) float64 {
z := float64(x);
for i := 0; i < 10; i++ {
z := z - (z*z - x) / (2 * z);
}
return z;
}
Can anyone point out what I'm missing about the language? I think it has to do with =
vs. :=
and scoping, but I'm not sure.
答案1
得分: 12
在你的for循环中,:=
声明了一个新的变量z
,它遮蔽了外部的z
。将其改为普通的=
可以解决这个问题。
func Sqrt(x float64) float64 {
z := x
for i := 0; i < 10; i++ {
z = z - (z*z - x) / (2 * z);
}
return z;
}
顺便说一下,为了获得相同的精度和更快的速度,你可以尝试以下实现,它可以同时执行你的两个步骤:
func Sqrt(x float64) float64 {
z := x
for i := 0; i < 5; i++ {
a := z + x/z
z = a/4 + x/a
}
return z
}
英文:
The :=
in your for-loop declares a new variable z
which shadows the outer z
. Turn it into a plain =
to fix the problem.
func Sqrt(x float64) float64 {
z := x
for i := 0; i < 10; i++ {
z = z - (z*z - x) / (2 * z);
}
return z;
}
By the way, for equal precision and a bit more speed you could try the following implementation which does two of your steps at once:
func Sqrt(x float64) float64 {
z := x
for i := 0; i < 5; i++ {
a := z + x/z
z = a/4 + x/a
}
return z
}
答案2
得分: 4
这是另一种看待该函数的方式:
func Sqrt(x float64) (z float64) {
z = x
for i := 0; i < 10; i++ {
z = z - (z*z - x)/(2*z);
}
return
}
这段代码是一个计算平方根的函数。
英文:
Here is another way to look at the function
func Sqrt(x float64) (z float64) {
z = x
for i := 0; i < 10; i++ {
z = z - (z*z - x)/(2*z);
}
return
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论