“declared and not used” 错误

huangapple go评论119阅读模式
英文:

"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&hellip; but to my noob eyes, it looks like I am:

func Sqrt(x float64) float64 {
    
    z := float64(x);
    
    for i := 0; i &lt; 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 &lt; 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 &lt; 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 &lt; 10; i++ {
		z = z - (z*z - x)/(2*z);
	}
	return
}

huangapple
  • 本文由 发表于 2013年8月15日 04:28:15
  • 转载请务必保留本文链接:https://go.coder-hub.com/18241655.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定