Ich bin etwas verwirrt über die Funktion round()
in C.
Zuerst sagt der Mensch:
%Vor% Der Rückgabewert ist ein double
/ float
oder ein int
?
An zweiter Stelle habe ich eine Funktion erstellt, die zuerst umrundet und dann nach int umgewandelt wird. Letzten auf meinem Code verwende ich es als ein Mittel zu vergleichen Doppelzimmer
%Vor%Diese Funktion ist anscheinend während meiner Tests nicht stabil. Gibt es hier Redundanz? Nun, ich suche nicht nur nach einer Antwort, sondern nach einem besseren Verständnis zu diesem Thema.
Der Wortlaut in der Man-Page soll wörtlich gelesen werden, also in seinem mathematischen Sinn. Die Formulierung "x ist ganzzahlig" bedeutet, dass x ein Element von Z ist, nicht dass x den Datentyp int
hat.
Das Umwandeln von double
in int
kann gefährlich sein, da der maximale willkürliche Integralwert, den ein double
halten kann, 2 ^ 52 ist (vorausgesetzt, ein IEEE 754-konformes binary64), kann der maximale Wert ein int
enthalten kleiner sein (es ist meistens 32 Bit auf 32-Bit-Architekturen und auch 32-Bit auf einigen 64-Bit-Architekturen).
Wenn Sie nur Zehnerpotenzen benötigen, können Sie es mit diesem kleinen Programm selbst testen:
%Vor% Anstelle von Casting sollten Sie die Funktionen verwenden, die einen korrekten ganzzahligen Datentyp zurückgeben, z. B .: lround(3)
.
Hier ist ein Auszug aus der man-Seite.
%Vor%Hinweis: Der zurückgegebene Wert ist NIE eine Ganzzahl. Der Bruchteil des zurückgegebenen Werts wird jedoch auf 0 festgelegt.
Hinweis: Abhängig davon, welche Funktion aufgerufen wird, wird der Typ des zurückgegebenen Wertes bestimmt.
Hier ist ein Auszug aus der man-Seite, auf welcher Art die Rundung gemacht wird:
%Vor%