epsilon für verschiedene float-Werte
Es ist FLT_MIN
Konstante nahe null ist. Wie man am nächsten some number
Wert?
Als Beispiel:
float nearest_to_1000 = 1000.0f + epsilon;
//epsilon must be the smallest value satisfying condition:
//nearest_to_1000 > 1000.0f
Ich würde es vorziehen, numerische Formel ohne Verwendung von speziellen Funktionen.
- In IEEE754, interpretieren die
float
alsuint32_t
, erhöhen um eins und interpretieren zurück (modulo-endian). - Das sollte eine Antwort sein.
- Siehe auch diese Frage.
- Durch die Art und Weise, FLT_MIN ist nicht der Schwimmer nächste null. Es ist die kleinste normale Schwimmer. Die denormals kleiner sind. Mit dem IEEE-754, FLT_EPSILON * FLT_MIN ist die kleinste positive float.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Vorsicht: Fehler wurden gefunden, die in diesem code während der Arbeit auf eine andere Antwort. Ich hoffe die aktualisieren das später. In der Zwischenzeit, schlägt es für einige Werte mit subnormals.
C eine Funktion dafür, in der
<math.h>
header.nextafterf(x, INFINITY)
der nächsten darstellbaren Wert nachx
, in die Richtung, inINFINITY
.Jedoch, wenn Sie es vorziehen, es selbst zu tun:
Folgenden gibt epsilon, die Sie suchen, für single precision (float), vorausgesetzt, IEEE 754.
Folgende gibt den nächsten darstellbaren Wert in float nach dem Wert, den es übergeben wird (Behandlung von -0 und +0, wie die gleichen).
0.75
und0.625
?