Thread Perl Bug bei int? (44 answers)
Opened by Rolf_PlusW at 2013-03-01 11:29

GUIfreund
 2013-03-04 19:16
#166214 #166214
User since
2011-08-08
559 Artikel
BenutzerIn
[default_avatar]
Fehler in biancas Testskript?

An bianca: Auf die Gefahr hin, dass du mich jetzt totschlägst - hier ist schon wieder eine GUIfreund-sub. Diesmal allerdings mit dem feinen Unterschied, dass sie auch als Abschneide-Routine gedacht ist.
Code (perl): (dl )
1
2
3
4
sub GUIfreund {
    use POSIX qw(floor ceil);
    return $_[0] > 0 ? floor($_[0]) : ceil($_[0]);
}

Dein Testskript zeigt nur 1 Abweichung zu deiner Abschneide-Routine, und das ausgerechnet bei einem völlig harmlosen Eingabewert:
Code: (dl )
1
2
3
'57'.......................geINTet mit GUIfreund: '56'.....
'57'.......................geINTet mit Bianca : '57'.....
Erwartet '57'

Wie das Schicksal so spielt, ein paar Zeilen später dann das:
Code: (dl )
1
2
3
'57'.......................geINTet mit GUIfreund: '57'.....
'57'.......................geINTet mit Bianca : '57'.....
Erwartet '57'

Selbe Eingabe, verschiedenes Ergebnis?? Das veranlasste mich, mir dein Skript genauer anzusehen. Dann habe ich die prints etwas geändert, um den Testwert in der möglichst vollen Genauigkeit zu sehen.
Code (perl): (dl )
1
2
3
4
        print "geINTet mit GUIfreund: \'$int\'".substr($space,0,15 - length ($int));
        printf "Eingabe %.15f\n", $test;
        print "geINTet mit Bianca   : \'$int\'".substr($space,0,15 - length ($int));
        printf "Eingabe %.15f\n", $test;

Und siehe da, an der entscheidenden Stelle war der Testwert etwas kleiner:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
geINTet mit GUIfreund: '0'..............Eingabe 0.000000000001819
geINTet mit Bianca : '0'..............Eingabe 0.000000000001819
Erwartet '0'

geINTet mit GUIfreund: '56'.............Eingabe 56.999999999999993
geINTet mit Bianca : '57'.............Eingabe 56.999999999999993
Erwartet '57'

geINTet mit GUIfreund: '0'..............Eingabe 0.580000000000000
geINTet mit Bianca : '0'..............Eingabe 0.580000000000000
Erwartet '0'

geINTet mit GUIfreund: '12'.............Eingabe 12.345000000000001
geINTet mit Bianca : '12'.............Eingabe 12.345000000000001
Erwartet '12'

geINTet mit GUIfreund: '57'.............Eingabe 57.000000000000000
geINTet mit Bianca : '57'.............Eingabe 57.000000000000000
Erwartet '57'

geINTet mit GUIfreund: '0'..............Eingabe 0.000000000000001
geINTet mit Bianca : '0'..............Eingabe 0.000000000000001
Erwartet '0'

geINTet mit GUIfreund: '1'..............Eingabe 1.012050000000000
geINTet mit Bianca : '1'..............Eingabe 1.012050000000000
Erwartet '1'

geINTet mit GUIfreund: '0'..............Eingabe -0.903000000000000
geINTet mit Bianca : '0'..............Eingabe -0.903000000000000
Erwartet '0'

geINTet mit GUIfreund: '-1'.............Eingabe -1.999999800000001
geINTet mit Bianca : '-1'.............Eingabe -1.999999800000001
Erwartet '-1'
Gruß
GUIfreund

View full thread Perl Bug bei int?