Zahlen und Computer

  1. Fliesskommazahlen:

    • Allgemein:
      x = (+/-1) Mantisse * BasisExponent

      Üblicherweise ist die Basis = 2, manche Taschenrechner benutzen auch 10.

    • Darstellung im Speicher (z.B. 64-Bit = double):
      Die Zahl Pi = 1.1001001000011111101101010100010001... * 21 wird im IEEE-Standard als

      SEEEEEEEEEEEMMMM....
      0100000000001001001000011111101101010100010001000010110100011000

      abgespeichert. Nach dem Vorzeichenbit (S) folgen 11 Bits fuer den Exponenten (E) und 52 Bits fuer die Mantisse (M). Man beachte den bias (210-1 = 1023) im Exponenten und die abgeschnittene führende 1 in der Mantisse.

      ieeebit.c | numbers.c

    • Maschinengenauigkeit, Runden, Under-/Overflow
      Mit ein paar Tricks läßt sich prüfen, welche Basis zur Zahlendarstellung benutzt wird, ob bei Addition zweier Zahlen gerundet oder abgeschnitten wird, wie Unter- bzw. Überlauf funktionieren etc.

      machar.c [NR] | machar.c [Netlib] | over.c | limit.c

  2. Summation / Kleine Differenzen:

    • exp(-x) für großes x:
      Summiert man die Reihenentwicklung direkt, treten Differenzen großer Zahlen auf. Es ist günstiger, statt dessen 1.0/exp(x) zu berechnen.

      exp-both.c

    • (1-cos x)/x2 für kleines x:
      Erneut tritt die Differenz nahezu gleicher Zahlen auf. Es ist günstiger, statt dessen 1/2 [sin(x/2) / (x/2)]2 zu berechnen

      cancel.c

    • Summiere 1/k2 über k = 1 ... Unendlich:
      Es empfiehlt sich, die Summation mit den kleinsten Termen zu beginnen. Ein weiterer Trick ist 'kompensierte Summation': Man versucht den Fehler in s = a + b mittels
      tmp = a + b
      err = (tmp - a) - b
      s = tmp - err
      zu kompensieren.

      sumord.c

Contents