TL; DR: как вызвать стандартный код с плавающей запятой таким образом, чтобы компилировать как 32-битные, так и 64-битные CGFloat без предупреждений?
CGFloat определяется как double или float, в зависимости от настроек компилятора и платформы. Я пытаюсь написать код, который хорошо работает в обеих ситуациях, не создавая большого количества предупреждений.
Когда я использую такие функции, как floor, abs, ceil и другие простые операции с плавающей запятой, я получаю предупреждения об усечении значений. Например:
предупреждение: неявное преобразование сокращает 64-битное значение до 32-битного значения
Меня не беспокоит правильность или потеря точности вычислений, так как я понимаю, что могу просто использовать двойную точность постоянно версии всех функций (этаж вместо пола и т. д.); однако мне пришлось бы терпеть эти ошибки.
Есть ли способ написать чистый код, поддерживающий как 32-битные, так и 64-битные числа с плавающей запятой, без использования большого количества #ifdef __ LP64 __ или написания функций оболочки для всех стандартных функций с плавающей запятой?