Hallo,
ich werd aus dem Standard nicht so recht schlau. Folgendes Situation:
Wenn ich zwei (noch normalisierte) Fließkommazahlen mit verschiedenen
Exponenten addiere, muss die betragsmäßig kleinere von beiden ja
denormalisiert werden (nach rechts schieben, Exponent erhöhen), bis die
Exponenten übereinstimmen.
(Großbuchstaben = größere Zahl, die '1' vornean ist das implizite Bit)
1 | Vorher:
|
2 | 1AAAAAAAABBBBBBBBCCCCCCCC *2^EE
|
3 | 1aaaaaaaabbbbbbbbcccccccc *2^ee z.B. mit ee = EE-2
|
4 |
|
5 | Nachher:
|
6 | 1AAAAAAAABBBBBBBBCCCCCCCC *2^EE
|
7 | 001aaaaaaaabbbbbbbbcccccccc *2^(ee+2) ee+2 ist EE, also gleich
|
Nun kann addiert werden.
Dabei frage ich mich:
Die beiten letzten Bits der kleinen Zahl (die zwei überstehenden cc
rechts), die gingen ja jetzt normalerweise verloren. Würde das schon zu
einer /Inexact/-Ausnahme führen?
Und weiter: Zur Rundung schlägt der Standard vier Modi vor: nach +Inf,
nach -Inf, zur nächsten darstellbaren Zahl und nach 0. Wie soll das
funktionieren? Ich kann mir da auch nach umfangreicher Lektüre der
Drafts zu IEEE754 und IEEE754R keinen Reim darauf machen.
Dort heißt es, die Rechnung sei so durchzuführen, als wären beide
Operanden von unendlicher Genauigkeit -- klingt gut, aber wie soll das
aussehen? Mehr Genauigkeit i.S.v. niederwertigeren Bits bekomme ich im
Beispiel oben nur von der kleineren Nummer (die cc rechts), nur dort
stimmen die Stellen der größeren Zahl ja schon nicht mehr (wären ja
Null, so weit reicht die Mantisse ja nicht).
Bin dankbar für jeden Tipp!
Vielen Dank und Gruß,
Kama