9

変数を使用していないというエラーが表示されますが、初心者の目には次のように見えます。

func Sqrt(x float64) float64 {

    z := float64(x);

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

    return z;
}

誰かが私が言語について見逃していることを指摘できますか? =対とスコープに関係していると思います:=が、よくわかりません。

4

2 に答える 2

12

for ループのは、outer をシャドウ:=する新しい変数を宣言します。問題を解決するには、プレーンに変えてください。zz=

func Sqrt(x float64) float64 {

    z := x

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

    return z;
}

ところで、同等の精度ともう少し速度を上げるために、一度に 2 つのステップを実行する次の実装を試すことができます。

func Sqrt(x float64) float64 {
    z := x
    for i := 0; i < 5; i++ {
        a := z + x/z
        z = a/4 + x/a
    }
    return z
 }
于 2013-08-14T20:32:25.657 に答える
4

関数を見る別の方法を次に示します。

func Sqrt(x float64) (z float64) {
    z = x
    for i := 0; i < 10; i++ {
        z = z - (z*z - x)/(2*z);
    }
    return
}
于 2013-08-15T09:48:12.200 に答える