Gegeben ist X: Double.
Gesucht sind die kleinsten L, R: Double, für die gilt: X - L < X < X + R.
Umgangssprachlich: Gegeben ist eine Zahl X vom Typ Double. Gesucht sind zwei Zahlen L und R vom Typ Double. Dabei soll L so bestimmt werden, dass X := X - L zur nächst kleineren Zahl führt, die mit Double darstellbar ist; und soll R so bestimmt werden, dass X := X + R zur nächst größeren Zahl führt, die mit Double darstellbar ist.
Der Typ Double ist so aufgebaut:
Zitat:
Eine Double-Zahl mit acht Byte (64 Bit) wird in drei Felder unterteilt: s: 1 Bit, e: 11 Bits und f: 52 Bits.
Der Wert v der Zahl ergibt sich folgendermaßen:
- Wenn 0 < e < 2047, ist v = (-1)s * 2(e-1023) * (1.f)
- Wenn e = 0 und f <> 0, ist v = (-1)s * 2(-1022) * (0.f)
- Wenn e = 0 und f = 0, ist v = (-1)s * 0
- Wenn e = 2047 und f = 0, ist v = (-1)s * Inf
- Wenn e = 2047 und f <> 0, ist v ein NaN
(Quelle:
http://docwiki.embarcadero.com/RADSt...Der_Typ_Double)
Um auf die Komponenten zuzugreifen könnte man den Wert zerlegen, etwa so:
Delphi-Quellcode:
type
TDouble64Rec =
record
Sign: TValueSign;
// Unit System.Math
Exp: NativeInt;
Frac: Double;
// eben ohne Sign und Exp
end;
Wie kann man nun L und R bestimmen?