Ik ben al gaan door een java tutorial, en rende een aantal vreemde in dit kleine voorbeeld ...
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();
}
}
}
Het rendement is vreemd - toen ik zag de resultaten, ik schreef een klein programma dat een aantal letterlijke floating point getallen, allemaal met het normale binair naar decimaal eigenaardigheid (1.002 tot 1,001 \u003d ,000999999997) afgetrokken, maar toen ik de hierboven code, krijg ik wat hieronder:
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
....
Ik ben niet zeker of het is iets wat ik verkeerd doe of wat de oorzaak is van het. Ik heb overal gezocht en alles wat ik heb gevonden is de mensen vragen over de hardware beperkingen van floating point rekenkunde. Alle hulp zou zeer gewaardeerd worden.
----- Post Update -----
Na het zien van het hier wordt geplaatst Ik dacht dat ik besefte dat ik geen rekening gehouden met de wetenschappelijke notatie ... Jongen Ik voel me stom nu
