математика двойной точности для iPhone / iPad - PullRequest
9 голосов
/ 13 января 2012

Принятый ответ на этот вопрос вики-сообщества: Какие рекомендации вы используете при написании Objective-C и Cocoa? говорит, что iPhone не может выполнять математику с двойной точностью (или, скорее,но только эмулируется в программном обеспечении.) К сожалению, ссылка 2009 года, которую она предоставляет в качестве справки: Двойное или плавание на iPhone прямо противоречит этому утверждению.Оба они старые, написанные, когда только что вышел 3GS.

Так что же нового в новейшей архитектуре arm7?Нужно ли беспокоиться о флаге «большого пальца», на который ссылается вторая ссылка?Могу ли я безопасно использовать double переменные?У меня неприятные воспоминания о мрачных днях 386SX и DX и «математических сопроцессорах».Скажите мне, что сейчас 2012 год, и мы пошли дальше.

1 Ответ

6 голосов
/ 13 января 2012

Во всех iPhone нет причин поддерживать двойную точность. Все они используют архитектуру Cortex-A8 с сопроцессором cp15 (который поддерживает IEEE float и двойные вычисления в аппаратном обеспечении).

http://www.arm.com/products/processors/technologies/vector-floating-point.php

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

В качестве примечания: если процессор поддерживает набор команд NEON, значения типа double и float могут быть вычислены быстрее, чем при использовании сопроцессора.

http://pandorawiki.org/Floating_Point_Optimization#Compiler_Support

РЕДАКТИРОВАТЬ: хотя VFP и Neon являются дополнительными расширениями для ядра ARM, у большинства cortex-A8 они есть, и все они используются в iPhone и iPad.

...