CGFloat: округление, пол, абс и точность 32/64 бит.

TL; DR: как вызвать стандартный код с плавающей запятой таким образом, чтобы компилировать как 32-битные, так и 64-битные CGFloat без предупреждений?


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

Когда я использую такие функции, как floor, abs, ceil и другие простые операции с плавающей запятой, я получаю предупреждения об усечении значений. Например:

предупреждение: неявное преобразование сокращает 64-битное значение до 32-битного значения

Меня не беспокоит правильность или потеря точности вычислений, так как я понимаю, что могу просто использовать двойную точность постоянно версии всех функций (этаж вместо пола и т. д.); однако мне пришлось бы терпеть эти ошибки.

Есть ли способ написать чистый код, поддерживающий как 32-битные, так и 64-битные числа с плавающей запятой, без использования большого количества #ifdef __ LP64 __ или написания функций оболочки для всех стандартных функций с плавающей запятой?

11
задан leecbaker 8 October 2011 в 05:08
поделиться