AW: linux-l: runden in Perl

Jens Dreger jens.dreger at physik.fu-berlin.de
Do Nov 16 14:01:10 CET 2000


On Thu, Nov 16, 2000 at 01:42:19PM +0100, Stefan Bund wrote:
> "Heinz W. Pahlke" <h.pahlke at berlin.de> writes:
> > Ein System konnte ich nicht erkennen. Allerdings war und ist Mathe
> > auch nicht mein staerkstes Fach.
> 
> Vielleicht (ich_kenne_das_fachwort_nicht_mehr)-Runung: bei 5 am Ende,
> wird abgerundet, wenn die vorstehende Ziffer gerade ist, aufgerunden,
> wenn sie ungerade ist (oder eben umgekehrt).
> 
> Bei dieser Art der Rundung mitteln sich Rundungsfehler im durchschnitt
> föllig weg -- bei der normalen Methode ist das nämlich nicht der Fall
> (da ist der Mittelwert etwas zu hoch).

Stimmt. Erstens freue ich mich, dass dieses Problem als vollkommen
unabhaengig von Perl erkannt wurde (nachher muss ich mir wieder
anhoeren, Perl koenne nicht rechnen, dabei war das doch wohl Excel),
zweitens steht im source der libc in der zustaendigen Funktion
print_fp.c:

------8<--------
  [...]
  if (digit == L'5' && (*(wcp - 1) & 1) == 0)
          {
            /* This is the critical case.        */
            if (fracsize == 1 && frac[0] == 0)
              /* Rest of the number is zero -> round to even.
                 (IEEE 754-1985 4.1 says this is the default rounding.)  */
  [...]
-----8<-------------

Also: kein Bug, sondern Absicht.

Gruss,

Jens.



Mehr Informationen über die Mailingliste linux-l