Jag har gått igenom en java tutorial, och sprang över några besynnerliga i detta lilla exempel ...
Kod:
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();
}
}
}
Avkastningen är märkligt - när jag såg resultatet, jag skrivit ett litet program som dras av ett antal bokstavlig flyttal, alla med normal binär till decimal oddness (från 1,002 till 1,001 \u003d ,000999999997), men när jag kör över kod, får jag vad som nedan:
Kod:
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
....
Jag är inte säker på om det är något jag gör för fel eller vad som orsakar det. Jag har letat överallt och alla jag har hittat är folk frågar om hårdvaran begränsningar flyttal aritmetik. Någon hjälp skulle bli mycket uppskattat.
----- Post Update -----
Efter att ha sett den här postat Jag insåg att jag inte tog hänsyn till vetenskaplig notation ... Pojke som jag känner dum nu
