Jeg har været igennem en java tutorial, og løb hen over nogle mærkværdige i dette lille eksempel ...
Code:
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();
}
}
}
Afkastet er mærkeligt - når jeg så de resultater, jeg skrevet et lille program, der trækkes en række bogstavelig flydende komma tal, alle med en normal binær til decimal oddness (1,002 til 1,001 \u003d ,000999999997), men når jeg kører over kode, jeg får, hvad er nedenfor:
Code:
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
....
Jeg er ikke sikker på, om det er noget jeg gør forkert eller hvad der forårsager det. Jeg har søgt over det hele og alle jeg har fundet er folk spørger om den hardware begrænsninger floating point aritmetik. Enhver hjælp vil blive meget værdsat.
----- Post Update -----
Efter at have set det offentliggjort her, jeg har lige indset at jeg ikke var taget hensyn til de videnskabelige notation ... Dreng at jeg føler stum nu
