Gibt es eine Möglichkeit, programmgesteuert das Double zu erhalten, das 1.0 am nächsten kommt, aber nicht 1.0 ist?
Ein hackiger Weg, dies zu tun, wäre, das Double auf eine gleich große Ganzzahl zu speichern und dann eine zu subtrahieren. So wie IEEE754-Gleitkommaformate funktionieren, würde dies dazu führen, dass der Exponent um eins verringert wird, während der Bruchteil von allen Nullen (1.000000000000) auf alle Einsen (1.111111111111) geändert wird. Es gibt jedoch Maschinen, auf denen Ganzzahlen als Little-Endian und Gleitkomma als Big-Endian gespeichert sind, sodass dies nicht immer funktioniert.
nextafter()
ist der einzig richtige Weg, um das zu erreichen, was er will.
1.0000...
Binär eine Dekrementierung ist 0.111111....
und um sie zu normalisieren, müssen Sie sie nach links verschieben. 1.11111...
Dazu müssen Sie den Exponenten dekrementieren. Und dann sind Sie 2 ulp von 1.0 entfernt. Nein, wenn Sie einen vom Integralwert abziehen, erhalten Sie NICHT das, was hier gefragt wird.