1unitedpower: Ich erkärs Dir ...

Beitrag lesen

Och Leute - seid ihr alle durch JavaScript und PHP soweit vom Blech abgehoben, dass ihr die Grundlagen nicht mehr kennt?

So grundlegend ist das nicht, du liegst auch teilweise daneben. Im übrigen ist zumindest JS Arithmetik IEEE konform.

Sicher, in C ist die Reihenfolge der Operandenauswertung undefiniert

Das stimmt nicht. C verwendet eine left-most, inner-most Auswertungsstrategie für arithmetische Operatoren.

aber die Reihenfolge, in der die OPERATOREN angewendet werden, ist durch die Assoziativität bestimmt und deswegen erfolgt die Addition in Zeile 21 von links nach rechts.

Das stimmt nun wieder, aber das bedeutet nicht, dass die Addition auch dem Assoziativitätsgesetz folgt. Wir benutzen hier „Assoziativität“ für zwei unterschiedliche Sachverhalte, das sollten wir nicht durcheinander werfen.

Deswegen sind die Summanden x2 und x4 nach der Zuweisung an die Akkumulatorvariable float y verschwunden.

Das stimmt ebenfalls, das ist der Auslöschungseffekt. Es erklärt aber nicht, wieso der Fehler in der einen Berechnung auftritt und in der anderen nicht. Jedenfalls nicht, wenn man davon ausgeht, dass das Ergebnis einer Floating-Point-Addition wieder eine Floating-Point-Zahl ist.

Meine Vermutung war deshalb, dass mit einer Optimierungsstufe kompiliert wurde, die es dem Compiler erlaubt die Reihenfolge der Additions-Anwendungen zu variieren. Dann könnte aus a + b + c nämlich c + b + a geworden sein. Dann könnte in der einen Berechnung Auslöschung auftreten und in der anderen nicht. Deshalb kam ich auf die Nicht-Assoziativität.

Wirft man meine Annahme über Board, könnte man den Effekt auch damit erklären, dass C intern mit höherer Präzision rechnet. Darauf wolltest du vermutlich hinaus. Im Moment erscheint mir beides gleich wahrscheinlich.

0 51

Addition != Addition: Warum?

Jonas2
  • programmiertechnik
  1. 0
    1unitedpower
    1. 0
      Jonas2
    2. 1
      Matthias Apsel
      1. 0
        1unitedpower
        1. 0
          Jonas2
          1. 0
            1unitedpower
  2. 0
    Tagwächter
    1. 0

      Netter Versuch der Verarsche.

      Tagwächter
      1. 0
        Jonas2
        1. 0
          Tagwächter
      2. 0

        By the way: Kalender-Test

        Tagwächter
        1. 0
          Jonas2
          1. 0
            Google weiß alles
        2. 0
          1unitedpower
  3. 0

    Ich erkärs Dir ...

    Google weiß alles
    1. 0
      Jonas2
      1. 0
        Google weiß alles
        1. 1
          Rolf b
          1. 0
            Rolf b
            1. 0
              Der-Dennis
          2. 0
            Tagwächter
          3. 0
            1unitedpower
            1. 1
              Rolf b
              1. 0
                1unitedpower
                1. 0
                  Rolf b
    2. 0
      Der-Dennis
      1. 1
        Matthias Apsel
        1. 0
          Google weiß alles
          1. 0
            Der Martin
            • mathematik
            • programmiertechnik
            1. 0
              Google weiß alles
          2. 0
            Gunnar Bittersmann
        2. 0
          Der-Dennis
      2. 0
        Gunnar Bittersmann
        1. 0
          Der-Dennis
          1. 0
            Tabellenkalk
            1. 0
              Der-Dennis
              1. 0
                Tabellenkalk
                1. 0
                  Der-Dennis
                  1. 0
                    Tabellenkalk
                    • begriff
                    1. 0
                      Der-Dennis
          2. 0
            Gunnar Bittersmann
            1. 1
              Matthias Apsel
              1. 0
                Gunnar Bittersmann
                1. 0
                  Der-Dennis
              2. 0
                Der-Dennis
            2. 0
              Tabellenkalk
              • hardware
              1. 0
                Der-Dennis
            3. 2
              Der-Dennis
              1. 0
                Gunnar Bittersmann
                1. 0
                  Der-Dennis