Arg, ich bin mathematisch echt aus der Übung. Naja, es ist auch schon spät.
Hier gibt es einen kleinen Überblick:
http://www-lehre.informatik.uni-osnabrueck.de/~ainf/2000/skript/node18.html
Hier ein kleiner Rechner:
http://www.h-schmidt.net/FloatApplet/IEEE754de.html
Man kann schon deutlich sehen, dass 1,3 oder 0,3 eben nicht GENAU gespeichert wird.
Weiterhin geht Genauigkeit verloren, wenn der Algorithmus (siehe 1. Link) die 2er Potenzen der Gleitkommazahlen anpasst.
Wenn man Gleitkommazahlen ausgibt, wird wohl immer gerundet, deswegen bekommt man bei
float f =1.3f;
System.out.println(f);
auch 1.3 geliefert und nicht 1.2999999523162842 (siehe 2. Link).
Bei den leppischen 32 Bit von Float ist nach der Berechnung der Rundungsfehler eben sichtbar.
Bedenke (!), dass Float und Double ihre Werte in Binärsystem speichern! Das was im Dezimalsystem so schön (also mit wenigen Nachkommastellen) aussieht wie 1.3 oder 0.3 kann im Binärsystem eine ziemlich krumme Zahl (also mit möglicherweise unendlich vielen Nachkommastellen) sein. Da wird natürlich irgendwann abgeschnitten.
Wenn es dich weitergehend interessiert, dann google mal nach IEEE 754-1985
PS:
Verdammt, ich weiß genau, dass ich an der Uni erfolgreich solche Dinger durchgerechnet habe.....