PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Wo ist der Fehler?


bulla
2006-12-07, 00:25:53
Hi
Ich habe für einen Kumpel ein kleines Tool geschrieben, nur leider gibt er nicht die korrekt um 0.1 erhöhten Werte aus, sondern nur z.B. sowas: 14.699999999999966
Vielleicht kann einer helfen:

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;

public class Buffozahlen {
final static double links = 10.9;

public static void main(String[] args) {
File file = new File("w:/test.txt");
try {
FileWriter writer = new FileWriter(file);
double currentleft = 1.0;
while (currentleft < links) {
double currentright = currentleft;
while (currentright < currentleft + 4.0) {
String ausgabe = "" + currentleft + "\t" + currentright;
currentright += 0.1;
System.out.println(ausgabe);
// writer.write(ausgabe+"\n");
// writer.flush();
}
currentleft += 0.1;
}
} catch (IOException e) {
System.out.println(e);
}
}
}

Xmas
2006-12-07, 00:41:32
0,1 lässt sich als binäre Gleitkommazahl schlicht nicht exakt darstellen. Statt also 0,1 zu addieren, addiert dein Programm eine Zahl die geringfügig abweicht. Und dieser Fehler summiert sich auf.

Du könntest stattdessen Integer nehmen, diese dann bei der Ausgabe durch 10 Teilen und den Rest als Nachkommaanteil nehmen. Der Datentyp BigDecimal wäre auch eine Möglichkeit.

bulla
2006-12-07, 00:53:43
Danke, sowas in der Richtung hab ich mir schon gedacht. Ich war mir nur recht sicher, dass man mit double bequem rechnen konnte...

DocEW
2006-12-07, 12:29:59
Sieht man auch schön, wenn man statt 0,1 mal 0,125 addiert. :)