Подтвердить что ты не робот

C: разница между (int) x и floor (x)?

В C, в чем разница между этими двумя?

float myF = 5.6;

printf( "%i \n", (int)myF ); // gives me "5"
printf( "%ld \n", floor(myF) ); // also "5"?

Когда предпочтительнее другого?

4b9b3361

Ответ 1

Одно большое отличие от отрицательных чисел; если вы измените myF на -5.6, то приведение к int возвращает -5, а floor(myF) - -6.

Что касается предпочтительности, то, как правило, я бы сказал, что только бросать в int, если вы знаете, что вам нужно - и, поскольку вы спрашиваете здесь, скорее всего, вы, вероятно, захотите floor.

(Также обратите внимание, что при форматировании printf %ld - длинное целое число, double - %lf.)

Ответ 2

floor(n) возвращает математический пол n, то есть наибольшее целое число, не большее n. (int)n возвращает усечение n, целое число, абсолютное значение которого не больше, чем значение n. Аналогично, ceil(n) возвращает математический потолок n или наименьшее целое число, не меньшее n. Как указывал AraK, число, возвращаемое floor() или ceil(), может не соответствовать диапазону int.

Ответ 3

Когда вы получаете двойное значение floor, это "целое число" double может или не может быть представлено в переменной типа int.

Ответ 4

Вы хотите, чтобы результат был целым или двойным?

Если вы хотите целое число, cast; если вы хотите использовать double, используйте floor.

Например, если вы хотите получить косинус значения, вы должны просто использовать floor, поскольку cos принимает двойной.

Но если вы хотите использовать значение для exit (просто выберите случайный API здесь), вы должны использовать, потому что exit принимает int.

Ответ 5

Бывший отбрасывает ваше значение float как целое число (и вы используете спецификатор int в вызове printf).

Последний использует пол (из C math lib), чтобы вернуть двойное округление.