Ergebnis 1 bis 7 von 7
  1. #1
    Stanley Jobson Avatar von Bonkers
    Registriert seit
    01.02.2010
    Beiträge
    735

    Standard Perl Typecast-Fehler?

    Hey,
    Führt das mal aus:

    Code:
    for (my $counter = -0.5; $counter < 0.5; $counter += 0.1) {
    print $counter."\n";
    }
    Ich bekomme da die Ausgabe:

    Code:
    -0.5
    -0.4
    -0.3
    -0.2
    -0.1
    -2.77555756156289e-17
    0.1
    0.2
    0.3
    0.4
    Wie kommt sowas zu Stande? Ich schreibe gerade ein komplexes Script um einige Berechnungen automatisch durchzuführen, und wundere mich warum da Mist raus kommt .___. Liegt der Fehler bei mir?

    Blackberry: der eine typ ist danach gestorben
    Bonkers: Echt?
    Blackberry: jep

  2. #2
    Anfänger
    Registriert seit
    08.03.2010
    Beiträge
    17

    Standard

    ich sehe keine fundamental feller im program kan sein das perl erst float und dann double wil und deshalb so komische ergebnis spuckt xD

  3. #3
    Stanley Jobson Avatar von GregorSamsa
    Registriert seit
    23.08.2008
    Beiträge
    729

    Standard

    O.O wie schreibst du denn?

    Und nein, in einer Schleife kann man nicht wirklich "fundamentale" Fehler machen, wenn die nur .1 runterzählen soll.

    Ich denke das könnte ein Typecast-Fehler sein - ich kenn leider Perl nicht allzugut.
    Kannst du der Variable einen festen Datentyp (float z.B.) zuweisen?

  4. #4
    Stanley Jobson Avatar von Bonkers
    Registriert seit
    01.02.2010
    Beiträge
    735

    Standard

    Und nein, in einer Schleife kann man nicht wirklich "fundamentale" Fehler machen, wenn die nur .1 runterzählen soll.
    Das ist ein Teil eines viel komplexeren Programmes, ich bin ja schon froh dass ich mit Perl leicht auch kompliziertere Berechnungen durchführen kann.

    Kannst du der Variable einen festen Datentyp (float z.B.) zuweisen?
    Nicht dass ich wüste. Arrays gehen natürlich, aber ansonsten benutze ich immer das $. Eine Googel-Suche hat mir auch keine anderen Möglichkeiten aufgezeigt.

    keine fundamentalen fehller im programm
    Danke für die Hilfe, aber gib dir doch ein bisschen Mühe, ja?

    Blackberry: der eine typ ist danach gestorben
    Bonkers: Echt?
    Blackberry: jep

  5. #5

    Registriert seit
    17.06.2009
    Beiträge
    559

    Standard

    Fließkommazahlen können niemals exakt dargestellt werden, es sind halt immer nur mehr oder weniger grobe Annäherungen an diese. Da können sehr schnell Rundungsfehler o.Ä. auftreten. z.B. sieht 2 + 0.1 intern aus wie 2.09999999... weil 2.1 nicht exakt dargestellt werden kann.

    So könnte es aber funktionieren:
    Code:
    for(-5..4){
       my $i = $_/10;
       print "$i\n";
    }

  6. #6
    Stanley Jobson Avatar von GregorSamsa
    Registriert seit
    23.08.2008
    Beiträge
    729

    Standard

    Zitat Zitat von Bonkers Beitrag anzeigen
    Das ist ein Teil eines viel komplexeren Programmes, ich bin ja schon froh dass ich mit Perl leicht auch kompliziertere Berechnungen durchführen kann.
    Damit meinte ich ja nur, dass diese Schleife zwar nicht funktioniert, aber in den 3 Zeilen Code kann man nun wirklich keine Fehler machen

    Aber sowas wie Lolcat sagte meinte ich auch.
    Ansonsten kannst du acuh versuchen gabze Zahlen in der Schleife herunterzuzählen, und im Output -0.5 u rechnen - probier mal aus, ich weiß allerdings nicht, wie Perl intern tickt und ob das funzt.

  7. #7
    Stanley Jobson Avatar von Bonkers
    Registriert seit
    01.02.2010
    Beiträge
    735

    Standard

    Danke für die Antworten, aber da muss ich mich wohl erstmal mit beschäftigen bevor ich weiterskripte, nicht dass durch solche Unregelmäßigkeiten meine Arbeit unbrauchbar wird.

    Blackberry: der eine typ ist danach gestorben
    Bonkers: Echt?
    Blackberry: jep

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •