O exercício Loop and Functions em gotour requer a implementação da função de raiz quadrada usando o método de Newton. E um de seus desafios é
pare quando o valor parar de mudar (ou apenas muda por um delta muito pequeno)
Uma abordagem ingênua de usar o ==
operador de comparação golang em tipos float64 levará a um loop infinito neste exercício.
A maneira como resolvo esse desafio é especificando uma tolerância, de forma que dois operandos float64 sejam considerados iguais quando o valor absoluto de seus deltas for menor que a tolerância.
const TOLERANCE = 0.000001
for {
// Newton's method
if diff := math.Abs(result - temp); diff < TOLERANCE { // consider equal and break
break
} else {
// do something and continue
}
}
Minha solução completa para este exercício pode ser encontrada aqui . O mesmo repositório também contém soluções para outros exercícios no gotour.