Intereting Posts
Вычислительная эффективность форвардного режима Automatic vs Numeric vs Symbolic дифференцирования Прочитайте координаты из файлов txt с помощью программы C Найти все возможные пути между двумя узлами в неориентированном графе Как вызвать встроенную функцию (или метод) из кода C модуля расширения Python? Как сделать эту программу в C? Часть 3.2-3.9 Вызов сценария из root-скрипта setuid C – скрипт не запускается с правами root Как OpenMP-директивы обрабатываются компилятором LibCURL при использовании на Mac с C Сколько бит точности для double между -1.0 и 1.0? Как печатать «ящики для ящиков» символы Юникода в C (терминал Linux utf8)? waitpid () не позволяет отправлять SIGINT дочернему процессу? Развернуть цикл и сделать независимую сумму с векторизации Comma Operator в состоянии цикла в C Список идентификаторов Vs Список типов параметров в C Не удалось скомпилировать LKM для Android

Могу ли я безопасно использовать CGFloat для хранения значений Float64 или Float32?

У меня есть свойство CGFloat, и иногда я получаю возвращаемое значение типа Float64 или также типа Float32. Могу ли я безопасно хранить CGFloat?

Из заголовков:

// CGBase.h typedef float CGFloat; // MacTypes.h typedef float Float32; typedef double Float64; 

Таким образом, CGFloat и Float32 являются float а Float64double поэтому вы теряете точность.

(Изменить для уточнения: это для 32-битных систем, таких как iPhone. Если вы создаете для 64 бит, CGFloat определяется как double .)

Лучше всего всегда пытаться сохранять и сохранять скалярные значения в том же типе, что и вы, потому что точность скалярных типов изменяется с помощью аппаратного обеспечения.

CGFloat не всегда гарантированно будет иметь одинаковый размер для всех современных и будущих аппаратных средств. Если вы замените для него другой тип или используете его для хранения другого типа, ваш код разрывается где-то по дороге.

Вы можете получить или потерять точность, когда выйдет новый iPhone / iPad или код может сломаться, если вы попытаетесь перенести его на Mac.