Domanda

Per un intenso scricchiolio dei numeri sto prendendo in considerazione l'uso del punto fisso anziché del punto mobile. Ovviamente importa quanti byte ha il tipo a virgola fissa, su quale CPU funzionerà, se posso usare (per Intel) MMX o SSE o qualunque altra cosa emerga ...

Mi chiedo se in questi giorni quando il virgola mobile corre più veloce che mai, vale la pena considerare il punto fisso? Ci sono delle regole generali in cui possiamo dire che contano di più del qualche percento? Qual è la panoramica di 35.000 piedi di prestazioni numeriche? (A proposito, presumo una CPU generale come si trova nella maggior parte dei computer, non DSP o sistemi integrati specializzati.)

È stato utile?

Soluzione

Ne vale ancora la pena. Il virgola mobile è più veloce che in passato, ma lo è anche il punto fisso. E fisso è ancora l'unica strada da percorrere se ti interessa la precisione oltre a quella garantita da IEEE 754.

Altri suggerimenti

In situazioni in cui hai a che fare con grandi quantità di dati, il punto fisso può essere il doppio della memoria efficiente, ad es. un numero intero di quattro byte anziché un doppio di otto byte. Una tecnica spesso utilizzata in grandi set di dati geospaziali è quella di ridurre tutti i dati a un'origine comune, in modo tale che i bit più significativi possano essere eliminati e lavorare con numeri interi a virgola fissa per il resto. Il virgola mobile è importante solo se il punto fluttua effettivamente, ovvero se si ha a che fare con una gamma molto ampia di numeri con una precisione molto elevata.

Un altro buon motivo per usare il decimale fisso è che l'arrotondamento è molto più semplice e prevedibile. La maggior parte del software finanziario utilizza decimali di precisione arbitrari a virgola fissa con arrotondamenti semifinali per rappresentare il denaro.

È quasi SEMPRE più veloce usare il punto fisso (esperienza di x86, pentium, 68k e ARM). Tuttavia, può anche dipendere dal tipo di applicazione. Per la programmazione grafica (uno dei miei principali usi del punto fisso) sono stato in grado di ottimizzare il codice utilizzando tabelle coseno precompilate, tabelle di registro ecc. Ma anche le operazioni matematiche di base si sono dimostrate più veloci.

Un commento sul software finanziario. In una risposta precedente era stato affermato che il punto fisso è utile per i calcoli finanziari. Nella mia esperienza (sviluppo di un ampio sistema di gestione della tesoreria e vasta esperienza nell'elaborazione delle carte di credito) NON utilizzerei il punto fisso. Si verificheranno errori di arrotondamento mediante virgola mobile o fissa. Usiamo sempre importi interi per rappresentare importi monetari, contando l'importo minimo possibile (1c per Euro o dollaro). Ciò garantisce che non vengano mai persi importi parziali. Quando si eseguono calcoli complessi, i valori vengono convertiti in doppi, vengono applicate regole di arrotondamento specifiche dell'applicazione e i risultati vengono riconvertiti in numeri interi.

Usa il punto fisso quando l'hardware non supporta il virgola mobile o l'implementazione dell'hardware fa schifo.

Fai attenzione anche quando fai lezioni per questo. Qualcosa che pensi possa essere veloce potrebbe effettivamente rivelarsi un cane quando si tratta di profilare a causa di (non) copie necessarie delle classi. Questa è un'altra domanda per un'altra volta.

Un altro motivo per utilizzare il punto fisso è che i dispositivi ARM , come telefoni cellulari e tablet, mancano di FPU (almeno molti di essi).

Per lo sviluppo di applicazioni in tempo reale ha senso ottimizzare le funzioni usando l'aritmetica a punto fisso. Esistono implementazioni di FFT (Fast Fourier Transform), molto importanti per la grafica, che basano i suoi miglioramenti sull'efficienza basandosi sull'aritmetica in virgola mobile.

Dato che stai usando una CPU per tutti gli usi, suggerirei di non usare il punto fisso, a meno che le prestazioni non siano così critiche per la tua applicazione che devi contare ogni tic. La seccatura dell'implementazione del punto fisso e della gestione di problemi come l'overflow non ne vale la pena, quando si dispone di una CPU, che lo farà per te.

IMHO, il punto fisso è necessario solo quando si utilizza un DSP senza supporto hardware per operazioni in virgola mobile.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top