PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Differenz zweier "gleicher" Zahlen ist ungleich NULL



TB09
27-01-2011, 08:45
Hallo zusammen,

ich habe ein GUI programmiert mit Entry-Werten (Zahlen), die ich wie folgt auslese:


my $Vmin = $ent_vdd_min-> get();
my $Vmax = $ent_vdd_max-> get();
my $Vstep = $ent_vdd_nom-> get();

Ich habe folgende Werte in das Gui eingeben:
Für Vmin: 0.8
Für Vmax: 1.2
Für Vstep: 0.2

Jetzt mache ich Folgendes um zu ermitteln, wieviele Vsteps Vmin von Vmax entfernt ist. Ich weiß, dass $i um den Wert 1 größer ist als die Differenz/Step.
Hier: (1.2-0.8)/2 --> 2;
In meinem Bsp. ist $i=3, was aber gweünscht ist.



while ($intV<$Vmax) {
$intV=$Vmin+$i*$Vstep;
$i++;
}
my $check=$Vmax-$intV;


Wenn ich nun aber $check ausgebe, so wird ein von NULL unterschiedlicher
Wert (-2.22...e-16) ausgegeben, was ich mir nicht erklären kann!
Lass ich nämlich $intV und $Vmax mit "print" ausgeben, werden beide als "1.2"
dargestellt.

Bin mit meinem Latein am Ende!

Ich hab ein "Workaround", möchte aber verstehen was da passiert! Kann mir bitte jemand weiterhelfen?!

Danke,

Thomas

John W
27-01-2011, 15:30
Das ist auf einen Rundungsfehler zurückzuführen. Wenn du z.B. in der Python-Konsole 0.4 eingibst, erhältst du 0.40000000000000002.
Das ist in vielen Sprachen so und liegt an der internen Speicherung als Dualzahl.
Die Darstellung der Zahlen ist meist abhängig von der Sprache und von der Genauigkeit, bei einer Zahl wie 1000000000000 ist das nicht gezeigte Milliardstel einfach nicht relevant.