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

bianca
 2013-04-27 13:42
#167295 #167295
User since
2009-09-13
7011 articles
BenutzerIn

user image
Hi!
Habe hier gerade eine blöde Konstellation gehabt, bei der 100000 minus 100000 nicht 0 ergab.
Habe im Code extra keine Fliesskommazahlen am Start.
Musste ein wenig fummeln, bis ich das überhaupt nachstellen konnte.

Mit folgendem Code kann ich das Problem reproduzieren:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#!/usr/bin/perl -w
use strict;
use warnings;

my $a = integer(100000 + -1.45519152283669e-011 );
my $b = 100000;

my $test = $a - $b;
print "$a minus $b = $test\n";

sub integer {
    my $wert = shift (@_) || 0;
    return 'FEHLER' if $wert =~ /e\+?\d+$/;
    return 0 if $wert =~ /e-\d+$/;
    $wert = $1 if $wert =~ /^(.*?)\./;
    $wert = 0 if !$wert or $wert == -0;
    return $wert;
}

Quote
100000 minus 100000 = -1.45519152283669e-011

1. Kommt bei euch auch nicht 0 raus mit diesem Code?
2. Was kann ich tun, damit das Ergebnis 0 ergibt?
Danke
10 print "Hallo"
20 goto 10

View full thread Rechenfehler mit Perl ausgleichen