2012-01-13 10 views
9

La risposta accettata a questa domanda Wiki della comunità: What are best practices that you use when writing Objective-C and Cocoa? dice che l'iPhone non può fare matematica a precisione doppia (o meglio, possono, ma solo emulare nel software.) Sfortunatamente il collegamento del 2009 fornisce come un riferimento: Double vs float on the iPhone contraddice direttamente tale affermazione. Entrambi sono vecchi, scritti quando il 3GS stava uscendo.matematica di precisione a doppio iPhone/iPad

Allora, qual è la storia con l'ultima architettura ARM7? Devo preoccuparmi del flag "thumb" del compilatore, i riferimenti del secondo link? Posso usare tranquillamente le variabili double? Sto avendo brutti flashback nei giorni bui di 386SX e DX e "coprocessori matematici". Dimmi che è il 2012 e ci siamo trasferiti.

risposta

6

In tutti gli iPhone, non c'è motivo per cui la doppia precisione non dovrebbe essere supportata. Tutti usano l'architettura Cortex-A8 con il coprocessore cp15 (che supporta l'IEEE float e i calcoli doppi nell'hardware).

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

Quindi sì, si può tranquillamente utilizzare doppie e non dovrebbe essere software emulato sui iPhone. Anche se questo viene fatto in hardware, potrebbero essere necessari più cicli per eseguire il doppio aritmetico matematico vs singolo (float). Oltre a usare il doppio, vorrei verificare che la precisione fosse appropriata per la tua applicazione.

Come nota a margine, se il processore supporta l'istruzione NEON impostata, i doppi e i float possono essere calcolati più velocemente rispetto all'utilizzo del coprocessore.

http://pandorawiki.org/Floating_Point_Optimization#Compiler_Support

EDIT: Anche se VFP e neon sono estensioni opzionali al nucleo ARM, la maggior parte della corteccia A8-loro hanno e tutti di loro quelli utilizzati in iPhone e iPad fare pure.

+0

OK, grazie. Questo è quello che pensavo dovesse essere. Il dominio dell'applicazione è DSP audio; da qui il mio desiderio di doppio. Sono stato sorpreso di trovare quelle due risposte autorevoli e ad alto punteggio su SO con tali informazioni contraddittorie. Lasciando aperto se qualcuno può commentare la bandiera "Thumb". –

+0

Non devi preoccuparti del flag Thumb Compiler, a meno che tu non stia scrivendo un assembly di basso livello, questo sarà tutto ottimizzato in base al tuo livello di ottimizzazione e se lo vuoi ottimizzato per tempo o spazio. – nmjohn

+0

Grazie. Ho pensato che tutto questo sarebbe stato un non-problema. –

Problemi correlati