Come determinare quanti numeri ci sono in un sistema di numeri in virgola mobile?

3

Sto cercando di rendere i sistemi in virgola mobile un po 'più intuitivi per me stesso. Ci sono alcune cose di cui sono confuso e penso che il modo migliore per chiarire le mie confusioni sarebbe che qualcuno potrebbe guidarmi attraverso una domanda: quanti numeri ci sono in un sistema di numeri in virgola mobile (data la base, la precisione, esponente massimo e esponente minimo)?

Questo è quello che sto pensando:

Immagino che il numero massimo possibile (realmax) diviso per il numero più piccolo possibile (realmin) darebbe tutti i possibili numeri positivi. Una parte di me crede anche che potrei dividere il realmax con il minimo incremento, epsilon macchina (eps), per capire quanti numeri ci sono. Solo le differenze di grandezza tra eps (10 ^ -16 per IEEE a doppia precisione) e realmin (10 ^ -308), tuttavia, mi dicono che non è affatto vero. Non riesco a pensare a un'intuizione del perché!

Quindi il problema che sto affrontando è determinare la formula corretta per realmax e realmin. La risposta che ottengo usando le formule del mio libro di testo differisce radicalmente da quella che ho ottenuto con la formula di wikipedia.

Aiuto!

    
posta user46346 30.01.2012 - 01:30
fonte

3 risposte

6

Quanto segue si basa sulla mia detrazione e non ho alcuna prova della sua accuratezza.

In definitiva, quanti byte utilizza un numero in virgola mobile? Un computer non può rappresentare più numeri univoci rispetto a modelli bit univoci. Per un punto mobile a 64 bit ( C # double ) lì sono 2 ^ 64 valori unici. Nota che alcune combinazioni danno valori equivalenti. Citando Wikipedia:

While the exponent (11-bits for C# double) can be positive or negative, in binary formats it is stored as an unsigned number that has a fixed "bias" added to it. Values of all 0s in this field are reserved for the zeros and subnormal numbers, values of all 1s are reserved for the infinities and NaNs.

Quindi questo significa che ci sono 2 ^ 53 combinazioni che rappresentano numeri infiniti o non validi e 2 ^ 53 combinazioni che rappresentano numeri zero e subnormali. Non posso dire in un modo o nell'altro se ci sono altre combinazioni di bit che produrranno lo stesso numero.

2 ^ 64 - 2 ^ 53 + 3 = 18,437,736,874,454,810,627 valori univoci (Rappresenta tutte le combinazioni di bit con infinito positivo, infinito negativo e combinazioni non numeriche che vengono condensate a tre valori univoci.)

Leggi Virgola mobile, Rappresentazione interna .

    
risposta data 30.01.2012 - 01:51
fonte
4

Il motivo per cui la tua intuizione sugli incrementi minimi non funziona è che gli incrementi aumentano man mano che i numeri aumentano. Questo è così che i numeri molto piccoli possono essere espressi con una precisione maggiore rispetto ai numeri molto grandi (per i quali diverse posizioni decimali probabilmente non contano). Ogni volta che superi una potenza di 2, la dimensione dell'incremento raddoppia. Quindi il numero di numeri in virgola mobile tra 8 e 16 è uguale al numero di numeri in virgola mobile tra 4 e 8: sono distanziati il doppio solo il doppio. E questo, a sua volta, è uguale al numero di numeri in virgola mobile tra 2 e 4; e anche tra 1 e 2. Ovviamente, esattamente quante dipendono dall'utilizzo della precisione singola o doppia.

Questo modello continua fino a quando non si scende al più piccolo esponente possibile. Per i numeri più piccoli di questo, gli incrementi sono tutti uguali.

    
risposta data 30.01.2012 - 01:51
fonte
1

Stai cercando di trovare la granularità di una rappresentazione in virgola mobile. Questo è formalmente chiamato "Machine Epsilon"

Puoi calcolarlo con questa formula

Quindiloprendieloinserisciinquestaformula1.0(XOR)(epsilon)=1.0.SequellocontieneilEpsilonècorretto.

SinotichequestoEpsilonèunamisuradellagranularitàperinumericonunvaloreassolutodi1.0.Epsilondiminuisce(valeadirepiùprecisione)perinumeriilcuivaloreassolutoèinferiorea1eaumenta(menoprecisione)perinumeriilcuivaloreassolutoèmaggioredi1.

Formuleesimilida qui.

    
risposta data 30.01.2012 - 01:54
fonte

Leggi altre domande sui tag