Mögliche Duplizieren dargestellt werden kann:
Which is the first integer that an IEEE 754 float is incapable of representing exactly?Finding die kleinste ganze Zahl, die nicht als IEEE-754 32-Bit-Float
Zum einen ist sie eine Hausaufgaben Frage, um nur diese löschen sofort auf. Ich bin natürlich nicht auf der Suche nach einem Löffel, nur ein kleiner Hinweis auf die richtige Richtung.
Meine Aufgabe besteht also darin, die kleinste positive ganze Zahl zu finden, die nicht als IEEE-754-Float (32 Bit) dargestellt werden kann. Ich weiß, dass das Testen für die Gleichstellung auf so etwas wie „5 == 5,00000000001“ wird fehlschlagen, so dass ich dachte, ich würde einfach Schleife über alle Zahlen und Test für die in dieser Art und Weise:
int main(int argc, char **argv)
{
unsigned int i; /* Loop counter. No need to inizialize here. */
/* Header output */
printf("IEEE floating point rounding failure detection\n\n");
/* Main program processing */
/* Loop over every integer number */
for (i = 0;; ++i)
{
float result = (float)i;
/* TODO: Break condition for integer wrapping */
/* Test integer representation against the IEEE-754 representation */
if (result != i)
break; /* Break the loop here */
}
/* Result output */
printf("The smallest integer that can not be precisely represented as IEEE-754"
" is:\n\t%d", i);
return 0;
}
Dies schlug fehl. Dann habe ich versucht, die Ganzzahl "i" von dem Fließkomma "Ergebnis" zu subtrahieren, das "i" ist, in der Hoffnung, etwas von "0.000000002" zu erreichen, das ich versuchen könnte, zu erkennen, was ebenfalls fehlgeschlagen ist.
Kann mir jemand eine Eigenschaft von Gleitkommazahlen zeigen, auf die ich mich verlassen kann, um die gewünschte Bruchbedingung zu erhalten?
-------------------- aktualisieren unten ---------------
Vielen Dank für Hilfe zu diesem Thema ein! Ich lernte hier mehrere Dinge:
Mein ursprünglicher Gedanke war in der Tat richtig und bestimmt das Ergebnis auf der Maschine beabsichtigt wurde, auf (Solaris 10, 32 Bit) ausgeführt werden sollte, doch scheiterte auf meinen Linux-Systemen zu arbeiten (64 Bit und 32 Bit).
Die Änderungen, die Hans Passant das Programm auch mit meinen Systemen arbeiten, gibt gemacht hinzugefügt scheinen einige Unterschiede zwischen den Plattformen geht hier zu sein, dass ich nicht erwartet hatte,
Vielen Dank an alle!
Wie schlägt es fehl? Wenn ich deinen Code kompiliere und ausführe, ist die Ausgabe 16777217. – Henrik
@KennyTM: Verdammt, und ich dachte, dass ich gut im Suchen war! Entschuldigung für das Duplizieren dann. – LukeN
@Henrik: Es wickelte nur zurück (INT_MAX -> 0) und brach nie mit einem Ergebnis. – LukeN