Математика двойной точности для iPhone/iPad
Принятый ответ на этот вики-вопрос сообщества: какие рекомендации вы используете при написании Objective-C и Cocoa? говорит, что айфоны не могут выполнять математику двойной точности (или, скорее, они могут, но только эмулируются в программном обеспечении). К сожалению, ссылка 2009 года, которую она предоставляет в качестве справки: двойное или плавание на iPhone прямо противоречит этому утверждению. Оба они старые, написанные, когда только что вышел 3GS.
Так что за история с новейшей архитектурой arm7? Нужно ли беспокоиться о флаге "большого пальца", на который ссылается вторая ссылка? Могу ли я безопасно использовать double
переменные? У меня неприятные воспоминания о мрачных днях 386SX и DX и "математических сопроцессорах". Скажите мне, что сейчас 2012 год, и мы пошли дальше.
1 ответ
Во всех 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
РЕДАКТИРОВАТЬ: Хотя VFP и Neon являются дополнительными расширениями для ядра ARM, большинство из Cortex-A8 имеют их, и все они также используются в iPhone и iPad.