Можно ли вызывать функцию как часть условия цикла for? - PullRequest
0 голосов
/ 01 июня 2018

Ниже приведены две попытки выполнить упражнение в 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

1 Ответ

0 голосов
/ 01 июня 2018

Ваше условие if сигнализирует, когда цикл должен остановиться , но условие for сигнализирует, когда цикл должен продолжаться.

Чтобы увидетьжелаемый результат, инвертируйте ваше for условие:

for math.Abs((z*z) - x) >= 0.0001 {
    z -= ((z*z - x) / (2*z))
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...