Ответ 1
Использовать fabs()
CGFloat f = -123.4f;
CGFloat g = fabs(f);
CGFloat
определяется как double
на 64-битных машинах и float
на 32-битных машинах. Если вы ориентируетесь как на 64, так и на 32 бит, этот ответ становится более сложным, но по-прежнему верен.
Вы хотите использовать fabs()
, потому что он работает с double
datatypes, которые больше, чем float
. В 32-битном назначении возвращаемого значения fabs()
(который является double
) в CGFloat
(который является float
) ТОЛЬКО ОК, если вы принимаете абсолютное значение a CGFloat
или float
. Вы можете переполнить 32-разрядный CGFloat
, если попытаетесь сохранить абсолютное значение большого номера double
. Короче говоря, 64-битная версия прекрасна, а на 32-битных не смешиваются и не соответствуют double
и CGFloat
, и все будет в порядке.
Макрос ABS()
, очевидно, может иметь побочные эффекты для некоторых компиляторов.