Sono stato nel corso degli anni un java tutorial, e corse in qualche stranezza in questo piccolo esempio ...
Codice:
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();
}
}
}
Il ritorno è strano - quando ho visto i risultati, ho scritto un piccolo programma che sottrarre un certo numero di letterale numeri in virgola mobile, il tutto con la normale al binario decimale bizzarria (1,002 - 1,001 \u003d .000999999997), ma quando ho eseguito quanto sopra codice, ottenere ciò che è qui di seguito:
Codice:
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
....
Non sono sicuro se è che sto facendo qualcosa di sbagliato o che cosa sta causando esso. Ho cercato in tutto e ho trovato tutte le persone che si chiede di limitazioni hardware di aritmetica in virgola mobile. Qualsiasi aiuto sarebbe molto apprezzato.
Aggiornamento post ----- -----
Dopo aver visto che ho appena postato qui ho realizzato non è stato tenuto conto della notazione scientifica ... Boy per ora mi sento stupido
