Qual è l'intervallo esatto di numeri interi (contigui) che possono essere espressi come double (o float?) La ragione per cui lo chiedo è perché sono curioso di questions such as this one quando si verificherà una perdita di precisione.Intervallo di numeri interi che possono essere espressi esattamente come float/doubles
Cioè
- Qual è il minimo intero positivo
m
tale chem+1
non può essere espresso esattamente come un doppio (risp. Float)? - Qual è il più grande numero intero negativo
-n
tale che-n-1
non possa essere espresso con precisione come doppio (risp. Float)? (Potrebbe essere lo stesso di sopra).
Ciò significa che ogni numero intero compreso tra -n
e m
ha una rappresentazione a virgola mobile esatta. Sto fondamentalmente cercando la gamma [-n, m]
sia per i galleggianti che per i doppi.
Limitiamo l'ambito alle rappresentazioni a virgola mobile a 32 e 64 bit standard IEEE 754. So che il float ha 24 bit di precisione e il doppio ha 53 bit (entrambi con un piccolo bit nascosto), ma a causa della complessità della rappresentazione in virgola mobile sto cercando una risposta autorevole per questo. Per favore non agitare le mani!
(risposta ideale sarebbe dimostrare che tutti gli interi da 0
a m
sono esprimibili, e che m+1
non lo è.)
Ho taggato con le lingue poiché non c'era traffico per gli altri tag che ho provato. Grazie per la tua risposta! –
Kyurem è morto nella sua analisi. Ma se vuoi una soluzione empirica, prova semplicemente con un ciclo for: 'float f = 0; for (;; ++ f) {if (f == (f + 1)) {cout << f; rompere; }} '. Simile per doppi e negativi. –