Verwenden der Funktion round () in c

8

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.

    
Mattana 25.08.2016, 15:43
quelle

2 Antworten

5

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) .

    
deamentiaemundi 25.08.2016 16:10
quelle
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%     
user3629249 25.08.2016 16:12
quelle

Tags und Links