Вот так катится компилятор Си. Objective-C - это сверхтонкий слой поверх C, поэтому хорошо знать, как работает ваш C.
Все выражения оцениваются в соответствии с приоритетом оператора, а типы никогда не повышаются и не понижаются до последней минуты. Именно так C может обеспечить максимально точные результаты.
Итак, шаги оценки для этого:
float result = 1.0 + 1/2;
Это действительно:
(float)result = (double)1.0 + (int)((int)1 / (int)2);
(float)result = (double)1.0 + (int)0;
(float)result = (double)1.0 + (double)0.0;
(float)result = (double)1.0;
(float)result = (float)1.0;
То, что вы хотите, это выражение:
float result = 1.0f + 1.0f/2.0f;
Тогда вы получите эту оценку:
(float)result = (float)1.0 + (float)((float)1.0 / (float)2);
(float)result = (float)1.0 + (float)0.5;
(float)result = (float)1.5;
Гораздо меньше работы для процессора, и вы получите то, что ожидаете. Повышение скорости заметно только в том случае, если вы используете реальные переменные, а не константы. В действительности ваше исходное утверждение и мои пересмотренные утверждения будут оптимизированы компилятором как:
(float)result = (float)1;
(float)result = (float)1.5;?