Есть ли любое различие между ними:
float foo1 = (int)(bar / 3.0);
float foo2 = floor(bar / 3.0);
Поскольку я понимаю, что оба случая имеют тот же результат. Есть ли какое-либо различие в скомпилированном коде?
Преобразование в int будет усечено до нуля. floor ()
будет усечен до отрицательной бесконечности. Это даст вам другие значения, если полоса
была отрицательной.
РЕДАКТИРОВАТЬ: поскольку вопрос мог быть изменен из-за путаницы между fabs ()
и floor ()
.
Учитывая исходные строки примера вопроса:
1. float foo = (int)(bar / 3.0);
2. float foo = fabs(bar / 3.0);
Разница в том, что если столбец отрицательный, результат будет отрицательным для первого и положительным для второго. Первое будет усечено до целого числа, а второе вернет полное десятичное значение, включая дробную часть.
(int) x
- это запрос на сохранение целой части x
(здесь нет округления)
fabs (x)
= | x | так что это > = 0
;
Пример: (int) -3,5
возвращает -3
; fabs (-3,5)
возвращает 3,5
;
В целом,
fabs (x)> = x
для всех x;
x> = (int) x
if x> = 0
x <(int) x
if x <0
Да. fabs
возвращает абсолютное значение своего аргумента, а приведение к int вызывает усечение деления (до ближайшего целого числа), поэтому результаты почти всегда будут разными.
SO 101, не меняйте свой вопрос после того, как люди ответят на ваш вопрос, вместо этого напишите новый вопрос.
Как вы думаете, почему у них будет такой же результат?
float foo = (int)(bar / 3.0) //will create an integer then assign it to a float
float foo = fabs(bar / 3.0 ) //will do the absolute value of a float division
bar = 1.0
foo1 = 0;
foo2 = 0.33333...