Runden von Gleitkommazahlen


Reele Zahlen sind nicht immer endliche Zahlen, dadurch sind sie mit endlichem Speicher nicht genau darstellbar. Auch endliche Zahlen können mehr Speicher benötigen, wie ihnen zur Verfügung steht. Um sie dennoch darzustellen, müssen die Zahlen gerundet werden. In der floating-point Arithmetik wird als Defaultwert "round to nearest, ties to even" verwendet. Um zu runden werden neben den normale Bits der Mantissa drei weitere Bits benöigt. Das Guard, das Round und das Sticky Bit. Das Guard und das Round Bit folgen direkt auf das letzte gespeicherte Bit. Das Sticky Bit ist ein OR für die restlichen Bits, die entfernt werden.

Aufrunden


Damit eine Zahl aufgerundet wird, muss das Guard Bit Eins sein. Das alleine reicht jedoch nicht um zu bestimmen, ob die Zahl aufgerundet werden soll. Damit dies eindeutig ist, muss entweder das Guard oder das Sticky Bit ebendfalls Eins sein. Wenn nur das Guard Bit den Wert Eins besitzt, entscheidet das Bit links des Guard Bit. Ist es eine Eins wird aufgerundet (ties to even), weil immer zu nächsten geraden Zahl gerundet wird. In diesen Fällen wird aufgerundet:
Hidden Bit Mantissa G R S
1 . 1 0 1 1 1 1
1 . 1 0 1 1 1 0
1 . 1 0 1 1 0 1
1 . 1 0 1 1 0 0

In all diesen Fällen wird die Zahl zu dieser Zahl aufgerundet:
1 . 1 1 0


Abrunden


Damit eine Zahl abgerundet wird, muss das Guard Bit Null sein. Das alleine reicht, damit eindeutig bestimmt weren kann, dass die Zahl abgerundet wird. Der zweite Fall in dem abgerundet wird ist, wenn das Guard Bit den Wert Eins und das Round und Sticky Bit Null sind und das Bit links des Guard Bit ebenfalls Null ist. In diesen Fällen wird abgerundet:
Hidden Bit Mantissa G R S
1 . 1 0 0 0 1 1
1 . 1 0 0 0 1 0
1 . 1 0 0 0 0 1
1 . 1 0 0 1 0 0

In all diesen Fällen wird die Zahl zu dieser Zahl abgerundet:
1 . 1 0 0