Es kann einen Unterschied machen. Für example:
int i = (1 << 24) + 3;
printf("%d\n", (int)(i * 0.6)); // 10066331
printf("%d\n", (int)(i * 0.6f)); // 10066332
Der Grund dafür ist, dass die Berechnung für die ersten in doppelter Genauigkeit durchgeführt wird, wobei letztere in einfacher Genauigkeit. Einzelpräzision kann nicht alle Ganzzahlen größer als 1 << 24
darstellen.
Eine weitere example (mit freundlicher Genehmigung von @EricPostpischil unten in den Kommentaren):
int i = 100;
printf("%d\n", (int)(i * 0.29)); // 28
printf("%d\n", (int)(i * 0.29f)); // 29
Hier ist der Grund ist, dass das Zwischenergebnis in doppelter Genauigkeit Fall leicht unter 29 fällt und so abgeschnitten wird, auf 28 nach unten
.
So würde ich vorschlagen, mit doppelter Genauigkeit erlaubt (dh den f
/F
Weglassen) (und dann round()
Verwendung anstatt auf implizite Abschneiden unter Berufung), wenn Sie einen guten Grund, es anders zu machen.
Die Klammern sind definitiv nicht erforderlich und sehen seltsam aus. 0.6F ist ein Token. –