Unit in the last place![]() Si definisce unit in the last place (unità in ultima posizione) o unit of least precision (unità di minore precisione), comunemente abbreviato in ulp, il valore assunto in un numero in virgola mobile dalla cifra unitaria in posizione meno significativa,[1] ovvero la distanza fra due numeri macchina consecutivi. L'ulp è adatta come misura dei piccoli errori nelle operazioni atomiche, mentre si presta meno bene ad esprimere gli errori di computazioni più ampie, per cui è comunemente impiegata per esprimere gli errori nell'aritmetica dei calcolatori, meno spesso nell'analisi numerica.[2] DefinizioneIl concetto di ulp è stato introdotto da William Kahan nel 1960, e la definizione originale era la seguente:
Per tenere conto dell'introduzione di valori non numerici nella rappresentazione (come Inf e NaN), la definizione precedente è stata estesa imponendo di considerare solo i due numeri macchina più prossimi a x e finiti, e ponendo ulp(NaN) = NaN.[3] Una definizione proposta da John Harrison pone ulp(x) come la distanza fra due numeri macchina consecutivi in virgola mobile a e b tra i quali sia compreso x (ovvero a ≤ x ≤ b e a ≠ b), assumendo che l'intervallo dell'esponente non sia limitato superiormente.[4][5] Le definizioni di Kahan e Harrison coincidono quando applicate a numeri macchina, ma possono differire nel caso di numeri reali, per valori in prossimità di potenze della base. Ad esempio, in base 2 con p cifre, se 1 < x < 1 + 2-p-1 si ha e .[6] David Goldberg non definisce ulp come una funzione, ma come la quantità espressa dalla cifra meno significativa unitaria del numero macchina, da cui si ricava una funzione che ad un numero in virgola mobile con p cifre x ∈ [be, be+1] associa il valore .[6] ProprietàQuando si arrotonda un numero in una rappresentazione in virgola mobile, il valore esatto può differire per difetto o per eccesso fino ad un mezzo del valore della cifra meno significativa nella rappresentazione macchina, per cui si ha un errore assoluto limitato fino a ±0,5 ulp. Considerando un numero in base b con p cifre ed esponente e, nella forma d,d...d × be, il valore del numero varia fra be e b×be, per cui l'errore relativo r associato a 0.5 ulp è compreso tra ovvero Si osserva quindi che l'errore relativo corrispondente a 0,5 ulp può variare di un fattore (detto wobble) pari a b. Quando si arrotonda un numero reale con un numero macchina, l'errore relativo è sempre limitato dall'estremo superiore del precedente intervallo, che viene definito come epsilon di macchina.[1] Lo standard IEEE 754, implementato da praticamente tutto l'hardware in virgola mobile moderno, richiede che i risultati delle operazioni elementari in virgola mobile (addizione, sottrazione, moltiplicazione, divisione, modulo e radice quadrata dal 1985, e fma dal 2008) siano correttamente arrotondati, quindi con un errore limitato a 0,5 ulp. Nel caso delle funzioni trascendenti in generale non è semplice determinare il numero di cifre necessarie nel calcolo per garantire un arrotondamento esatto (problema noto come table-maker's dilemma), e non tutte le librerie numeriche garantiscono l'arrotondamento delle funzioni trascendenti con precisione di 0,5 ulp, ma solitamente hanno almeno la precisione di 1 ulp.[7] Supporto nei linguaggi di programmazioneIl linguaggio C definisce nella standard library (header Le librerie Boost forniscono le funzioni In Ada i numeri macchina immediatamente precedente e successivo di un valore in virgola mobile possono essere ottenuti con gli attributi La libreria standard Java include dalla versione 1.5 le funzioni Note
Bibliografia
Voci correlate |
Portal di Ensiklopedia Dunia