2013-04-04 14 views
7

realmin "restituisce il più piccolo numero in virgola mobile positivo normalizzato in IEEE a doppia precisione". eps(X) "è la distanza positiva tra ABS (X) e successiva più grande nel numero in virgola mobile della stessa precisione di X".Perché realmin> eps (0)?

Se sto interpretando correttamente la documentazione di cui sopra, quindi realmin - il numero positivo più piccolo che può essere rappresentato - deve essere inferiore a eps (0). Ma:

>> realmin; % 2.2251e-308 
>> eps(0); % 4.9407e-324 

Ovviamente, eps(0), che è ancora più piccolo, può essere rappresentato anche. Qualcuno potrebbe spiegarmi questo?

risposta

10

questo è un problema in virgola mobile. Dovresti andare a leggere su denormal numbers.

Brevemente, realmin restituisce il numero più piccolo virgola mobile positivo normalizzato. Ma è possibile avere numeri denormali che sono più piccoli di questo e comunque rappresentabili in virgola mobile, che è ciò che restituisce eps(0).

spiegazione breve del numeri denormal

un numero decimale binario aspetto:

1.abcdef * 2^M 

dove abcdefg sono ciascuno 0 o 1, e M è un numero compreso tra -1022 < = M < = 1023. Questi sono chiamati normalizzati numeri in virgola mobile. Il più piccolo numero a virgola mobile normalizzato possibile è 1 * 2^(-1022).

I numeri denormal seguente aspetto

0.abcdef * 2^(-1022) 

così possono assumere valori che sono più piccoli del più piccolo numero decimale normalizzato possibile. I numeri denormali linearmente interpolano tra -realmin e realmin.

2

Forse è una questione di definizione, questo è quello che vedo nella documentazione di ENV:

For all X of class double such that abs(X) <= realmin, eps(X) = 2^(-1074)