Może to mieć znaczenie. Dla example:
int i = (1 << 24) + 3;
printf("%d\n", (int)(i * 0.6)); // 10066331
printf("%d\n", (int)(i * 0.6f)); // 10066332
Powodem jest to, że obliczenia na pierwszy odbywa się w podwójnej precyzji, ten ostatni w pojedynczej precyzji. Pojedyncza precyzja nie może reprezentować wszystkich liczb całkowitych większych niż 1 << 24
.
Innym example (dzięki uprzejmości @EricPostpischil w komentarzach poniżej):
int i = 100;
printf("%d\n", (int)(i * 0.29)); // 28
printf("%d\n", (int)(i * 0.29f)); // 29
Tu powodem jest to, że wynik pośredni w przypadku podwójnej precyzji spadnie nieco poniżej 29 lat, a więc jest obcięty do 28 .
Więc sugerowałbym pozwalając podwójnej precyzji (czyli z pominięciem f
/F
) (a następnie przy użyciu round()
zamiast polegać na niejawny obcięcia), chyba że masz dobry powód, aby zrobić inaczej.
Nawiasy są zdecydowanie niewymagane i wyglądają dziwnie. 0.6F to token. –