Ottimizzare C++/Ottimizzazione del codice C++: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Nessun oggetto della modifica
Riga 99:
=== Operazioni a virgola mobile ===
 
'''Se il processore target non contiene un'unità coprocessorea matematicovirgola (omobile, unitàsostituisci funzioni, costanti e variabili a virgola mobile), sostituiscicon le operazionicorrispondenti funzioni, costanti e variabili intere; mentre se contiene un'unità a virgola mobile a precisione solamente singola, sostituisci funzioni, costanti e variabili di tipo <code>double</code> con operazionile corrispondenti di sutipo interi<code>float</code>.'''
 
Gli odierni processori per sistemi desktop e server contengono hardware dedicato all'aritmetica a virgola mobile, sia a precisione singola che doppia, per cui tali operazioni, eccettuate somme e sottrazioni, che sono un po' più lente, sono pressoché altrettanto veloci quanto quelle su numeri interi.
 
Alcuni processori dedicati per sistemi embedded, invece, non contengono hardware dedicato all'aritmetica a virgola mobile, o contengono hardware in grado di gestire solo la precisione singola.
Pertanto, in tali sistemi, le operazioni non disponibili in hardware vengono solamente emulate con lentissime funzioni di libreria. In tal caso, risulta molto più veloce utilizzare l’aritmetical'aritmetica intera, ooppure, megliose adisponibile virgolain fissahardware, cioèl'aritmetica usando degli interi intendendolia moltiplicatiprecisione per un fattore di scalasingola.
Ogni numero viene moltiplicato per tale fattore in fase di input e viene per lo stesso fattore in fase di output, o viceversa.
 
Per gestire numeri decimali usando l'aritmetica a intera si deve usare gli interi intendendoli moltiplicati per un fattore di scala.
Ogni numero viene moltiplicato per tale fattore in fase di input e viene diviso per lo stesso fattore in fase di output, o viceversa.
 
=== Conversioni da numero a stringa ===