Dies ist eine sehr einfache Frage, aber eine wichtige, da es mein ganzes Projekt enorm beeinflusst.Trunking ein Doppel zu einem Float in C
Angenommen, ich habe folgendes Codestück:
unsigned int x = 0xffffffff;
float f = (float)((double)x * (double)2.328306436538696e-010); // x/2^32
Ich würde erwarten, dass f
etwas wie 0,99999 sein, sondern es rundet bis zu 1, da es in der Nähe float
Annäherung ist. Das ist nicht gut, da ich float
Werte auf dem Intervall von [0,1], nicht [0,1] brauche. Ich bin mir sicher, dass es etwas Einfaches ist, aber ich würde mich über Hilfe freuen.
Dies ist keine hilfreiche Antwort. Wie andere Antworten gezeigt haben (und sie haben gezeigt, wie), gibt es Dinge, die Sie tun können. –
@EricPostpischil, wie ist es nicht hilfreich? Es bietet eine funktionierende Lösung für das Problem, ohne einen Rundungsmodus zu verlassen, der alle Zwischen- und nachfolgenden Berechnungen ändert. –
Die Aussage "Es gibt nicht viel, was Sie tun können" ist irreführend und unnötig entmutigend. Die Aussage über Bits in einem "int" und einem "float" ist irrelevant; Das OP erwartet keine exakte Karte. Sie wollen nicht umrunden, nur um es zu kontrollieren. –