Em ECMAScript, dado um double finito e não negativo x
, a seguinte afirmação é sempre verdadeira?
Math.sqrt(x) === Math.pow(x, 0.5)
Eu sei que ambos Math.sqrt()
e Math.pow()
são aproximados pela implementação, e o resultado pode variar entre as plataformas. No entanto, eles são realmente intercambiáveis, ou há casos em que essa afirmação é avaliada como falsa?
Escrevi um programa de teste simples para verificar contraexemplos, mas não consegui encontrar nenhum:
let x;
while (true) {
x = Math.random();
if (!Object.is(Math.sqrt(x), Math.pow(x, 0.5))) {
break;
}
}
Também encontrei esta pergunta , onde a asserção falha em Python. No entanto, ao testar o mesmo exemplo em JavaScript, não consegui reproduzir o erro.
Essa afirmação pode ser falsa alguma vez? Ou é garantido que ela seja sempre verdadeira?