Thread Rechenfehler mit Perl ausgleichen (71 answers)
Opened by bianca at 2013-04-27 13:42

GUIfreund
 2013-04-29 16:32
#167353 #167353
User since
2011-08-08
559 articles
BenutzerIn
[default_avatar]
2013-04-27T18:21:05 bianca
Aber funktioniert ja alles nicht, egal was ich versuche.
Fängt ja schon hier an das Problem:
print "\n".(.57 * 100 == 57 ? 'ja' : 'nein')."\n";

Mach's doch mal Schritt für Schritt:
Code (perl): (dl )
1
2
3
4
5
6
7
8
use strict;
use warnings;

my $f = 0.57;
my $f100 = $f * 100;
print ($f100 == 57 ? 'ja' : 'nein', "\n");
my $i100 = sprintf('%.0f', $f * 100);
print ($i100 == 57 ? 'ja' : 'nein', "\n");

Ergibt
Quote
nein
ja

Mein Fazit: Nach dem Multiplizieren zu Integer sofort runden. Solange deine Zahlen nicht zu groß sind, sollte das klappen. Probiere mal, ob das für dich brauchbar ist.

Edit: Ich habe jetzt das berühmte Beispiel von Muffi
msg #166227
Quote
((1 - 0.9999) * 10000)
Das sollte 1 ergeben.

nach dem gleichen Muster behandelt
Code (perl): (dl )
1
2
3
4
5
6
use strict;
use warnings;
my $f = 0.9999;
my $f_faktor = 10000;
my $f_int = sprintf('%.0f', $f * $f_faktor);
print ((1*$f_faktor - $f_int) * 10000 == 1*$f_faktor ? 'ja' : 'nein', "\n");

Ergibt ja. Du siehst, man muss bei der Umsetzung verdammt aufpassen, dass alle Zahlen gleich skaliert sind, aber diese Lernphase hast du ja wohl schon hinter dir. Immerhin, auch dieses Beispiel rechnet jetzt korrekt.
Last edited: 2013-04-29 18:26:52 +0200 (CEST)
Gruß
GUIfreund

View full thread Rechenfehler mit Perl ausgleichen