Математика двойной точности для 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.

Другие вопросы по тегам