IPhone/iPad с двойной точностью математики

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

Так что же история с новейшей архитектурой arm7? Должен ли я беспокоиться о флагом компилятора "большой", который ссылается на вторую ссылку? Могу ли я безопасно использовать переменные double? У меня неприятные воспоминания темным дням 386SX и DXs и "математическим сопроцессорам". Расскажите мне об этом в 2012 году, и мы двинулись дальше.

Ответы

Ответ 1

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

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

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

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

http://pandorawiki.org/Floating_Point_Optimization#Compiler_Support

EDIT: хотя VFP и Neon являются дополнительными расширениями для ARM Core, большая часть коры головного мозга A8 имеет их, и все они используются в iPhone и iPad.