Le lingue che utilizzano una singola rappresentazione di numeri sono relativamente rare. Come ho digitato staticamente, posso solo pensare ad alcune varianti di base, e anche nel regno dinamicamente tipizzato so di più che usano almeno interi e float di un formato univoco. Quelli che sono arrivati relativamente tardi nel gioco e la scelta del punto di virgola mobile è probabilmente il risultato del fatto che il punto di virgola mobile era già disponibile nell'hardware e come tipo nella lingua di implementazione del loro interprete.
Ora, perché il virgola mobile binario è diventato il metodo di scelta per la modellazione dei tipi di numeri reali?
Se vuoi che un tipo modellino i numeri reali mentre usi una dimensione costante di poche parole, puoi scegliere tra numeri a virgola fissa e virgola mobile. Altri tipi di rappresentazione per i numeri razionali (punto fisso e punto mobile sono in grado di rappresentare solo il numero razionale e pochi altri valori come gli infiniti - che non sono numeri reali BTW) esistono ma sono meno utili.
Le rappresentazioni a punti fissi hanno alcuni vantaggi, ma hanno un grosso problema: non c'è un buon valore predefinito per il numero di cifre dopo il punto, quindi tutte le lingue e le librerie che le forniscono chiedono al programmatore di scegliere nel contesto della loro applicazione .
Le rappresentazioni a virgola mobile non hanno questo problema: una volta fissata la dimensione, puoi creare una ripartizione tra il significato (spesso impropriamente chiamato la mantissa) e l'esponente abbastanza buono da consentire di personalizzarlo con più problemi di risolverebbe.
Ci si potrebbe chiedere perché uno abbia scelto un formato in virgola mobile binario (BFP nel seguito della discussione) invece di un decimale. Il floating point decimale (DFP) ha un vantaggio uno (e nessuno più) rispetto al binario: può rappresentare esattamente la costante reale di quando li scriviamo di solito, in decimali. Tutti gli altri problemi di BFP sono anche problemi di DFP, ma possono essere nascosti per calcoli abbastanza semplici dal vantaggio sopra (ottieni il risultato esatto perché il calcolo è così semplice che tutti i risultati - finale e intermedio - sono esattamente rappresentabili) .
DFP presenta alcuni svantaggi. Alcune proprietà dei numeri reali sono anche proprietà di BFP, ma non di DFP (la più ovvia è che (a + b) / 2 può essere al di fuori dell'intervallo chiuso [a, b] con DFP) e per questo e per qualche altro ragioni, l'analisi delle proprietà numeriche degli algoritmi è più difficile per DFP che per BFP. Peggio ancora, il limite di errore ottenibile con DFP è peggiore di quello ottenibile con BFP per una determinata dimensione di rappresentazione. Implementare DFP è più difficile che implementare BFP (non tanto che al giorno d'oggi abbia una certa importanza, ma è stato un fattore - sia di complessità che di prestazioni ottenibili - quando è stata impostata la tendenza). Infine per il calcolo scientifico - storicamente il principale consumatore di FP - il vantaggio di DFP non è pertinente, mentre tutti i suoi svantaggi sono.
Quindi hai ottenuto BFP nell'hardware perché era quello che le persone volevano che FP voleva, e sebbene alcune definizioni linguistiche consentano DFP, le implementazioni raramente usano la possibilità e preferiscono usare ciò che l'hardware fornisce.