Fui passando um tutorial java, e decorreu em toda a alguns estranhamento neste pequeno exemplo ...
Código:
class SqrRoot {
public static void main(String args[]) {
double num,sroot,rerr,resquare;
for(num = 1.0; num < 100.0; num++) {
sroot = Math.sqrt(num);
System.out.println("Square root of " + num + " is " + sroot);
// compute rounding error
resquare = (sroot * sroot);
rerr = num - resquare;
System.out.println("Rounding error: num + " - " + resquare + " = " + rerr);
System.out.println();
}
}
}
O retorno é estranho - quando vi os resultados, me escreveu um pequeno programa que subtrai uma série de números literais de ponto flutuante, todos com o normal binário para decimal oddness (1,002 - 1,001 \u003d .000999999997), mas quando eu executar o referido código, fico com o que está abaixo:
Código:
Square root of 1.0 is 1.0
1.0 - 1.0 = 0.0
Square root of 2.0 is 1.4142135623730951
2.0 - 2.0000000000000004 = -4.440892098500626E-16
Square root of 3.0 is 1.7320508075688772
3.0 - 2.9999999999999996 = 4.440892098500626E-16
....
Não tenho certeza se é algo que estou fazendo errado ou o que está causando isso. Tenho pesquisado sobre todos e todas as pessoas que eu encontrei é perguntar sobre as limitações de hardware de ponto flutuante aritmética. Qualquer ajuda seria muito apreciada.
----- ----- Post Update
Depois de ver ele postado aqui eu percebi que não estava levando em conta a notação científica ... Menino para me sinto idiota agora
