2013-03-14 2 views
5

Должен ли я писать значения CGFloat с помощью постфикса f или нет?Есть ли разница производительности с использованием CGFloat с или без постфикса .f в Objective-C

CGFloat fValue = 1.2; 

против

CGFloat fValue = 1.2f; 

Я знаю, что это постфикс определить значение с плавающей точкой. Но необходимо ли, имеет ли смысл, есть ли различия в производительности между этими двумя или это просто визуальное представление, чтобы вы могли быстро определить тип значения (например, float в этом случае)?

+1

http://stackoverflow.com/questions/2391818/f-after-number-float-in-objective-cc – iphonic

+1

http://stackoverflow.com/questions/14302898/is-it-better-to-write -0-0-0-0f-or-0f-in-simple-0-for-expected-float-or/14302912 # 14302912 –

ответ

6

1.2 - double; то есть 64-битовое число с плавающей запятой с двойной точностью.

1.2f - float; то есть 32-битовое число с плавающей запятой с одинарной точностью.

С точки зрения производительности, это не имеет значения, как компилятор преобразует литералов из float в double и double в float по мере необходимости. Однако при назначении чисел с плавающей запятой из функций вам, скорее всего, нужно будет бросить, чтобы избежать предупреждения компилятора.

+0

Это также не имеет значения, потому что я сомневаюсь, что это приводит к любой измеримой производительности даже если он не был преобразован компилятором. Судя по формулировке, он кричит преждевременную оптимизацию. – borrrden

+0

Поэтому следует использовать постфикс, если я использую значения float и опускаю его, если вы используете double. После того, как весь компилятор выполнит некоторую дополнительную работу, если я опускаю postfix для значений float. Но в настоящее время не должно быть никакой разницы в производительности. –

+1

@BorutTomazin Я бы не стал об этом беспокоиться; Я видел много примеров, где представлены целые числа, и это также отлично работает. Учитывая объем работы, которую компилятор делает для создания вашего объектного файла, это * падение в океане *. – trojanfoe

0

Основное отличие заключается в:

1.0 или 1. является двойной постоянной

1.0f является поплавок постоянным

Без суффикса, буквальным с десятичной в нем (123,0) будет рассматриваться как число с плавающей запятой с двойной точностью.

Если вы назначаете или передаете это переменной или параметру с одной точностью, компилятор должен (должен) выдавать предупреждение. Приложение f сообщает компилятору, что вы хотите, чтобы литерал обрабатывался как число с плавающей запятой с одной точностью.

Смежные вопросы