In che modo gli unum possono emulare lo zero negativo dell'IEEE?


9

Attualmente sto leggendo "La fine dell'errore - Unum Computing" di John Gustafson ( Youtube ). Ciò di cui non sono ancora sicuro è come i casi gestiti in IEEE da zero con segno negativo vengano gestiti con unum.

Quindi, prima di tutto, gli unum consentono di rappresentare determinati valori esatti (in modo simile ai punti fluttuanti) e inoltre consentono di rappresentare gli intervalli aperti che si trovano tra i valori esatti (compresi quelli esatti -∞ e ∞). Quindi la riga di numero reale completa è rappresentata alternando valori precisi e intervalli aperti:

-∞, (-∞, -maxreal), -maxreal, ... -smallsubnormal, (-smallsubnormal, 0),

0,

(0, piccolo normale), piccolo normale, ... maxreal, (maxreal, ∞), ∞

In questo modo (nella tradizione IEEE) valori eccezionali come underflow e overflow sono solo alcuni intervalli aperti. In altre parole: queste condizioni precedentemente speciali ora si trasformano in casi regolari.

IEEE--corrisponde all'unione di {-∞} e (-∞, -maxreal).

E ora lo zero con segno potrebbe essere gli intervalli (-smallsubnormal, 0) e (0, smallspnormal).

Tuttavia, 1 / (- smallsubnormal, 0) è ora (-∞, -maxreal) e non -∞ da solo. Considerando che 1/0 è ∞.

Quello che sto ancora esitando a riguardo è che in IEEE -0 e +0 si equivalgono. Ma non lo fanno in unums. Sembra che la mappatura non sia al 100%. Quindi mi chiedo se ci sono delle maiuscole in cui la differenza può mostrare ((e se quei casi sono davvero rilevanti)).

(Sono consapevole del perché è zero negativo importante? , Usi per valore in virgola mobile negativo )


1
Perché pensi che la mappatura debba essere 1 a 1? I motivi indicati nelle domande che hai collegato sono un non-problema con unum, quindi perché fare uno zero negativo?
Ordous,

@Ordous: Perché (Ch.18.1, p.257) "Gli Unum sono un superset di float. I float sono semplicemente unum per i quali l'ubit è zero ecc. Ecc." che tutto (incluso guess) suggerisce che si può più o meno (e come inizio) tradurre le cose letteralmente. Sono pienamente consapevole che una traduzione letterale non sfrutta appieno gli unum.
falso

5
È abbastanza difficile discutere contro una citazione senza avere il libro a portata di mano. Tuttavia, le sue diapositive nella presentazione IEEE hanno indicato come un vantaggio di unum computing: "Non c'è bisogno di underflow". Quindi: nessuna necessità di zero negativo, in quanto è precisamente underflow. Forse si potrebbe estendere questo sistema per includere uno zero negativo, ma non c'è motivo per farlo. Lo 0 onestamente negativo in IEEE è incompatibile con la matematica .
Ordous,

@Ordous: Underflow è gestito dall'intervallo aperto (-smallsubnormal, 0) e dalla sua controparte positiva. Quindi queste sono le cose più vicine a -0 e +0. Ma questo intervallo può davvero comportarsi come se?
falso

8
Underflow non è "gestito" qui, semplicemente non esiste . 0 negativo è un problema in IEEE e questo standard sta cercando di risolverlo insieme ad altre cose. Non puoi e non dovresti equivalere a -0 e +0, ma poiché in IEEE la loro differenza è 0, devono essere uguali. Questo paradosso non ha una buona soluzione. In Unums essi fare una differenza, di conseguenza, essi non possono essere uguali. L'intero punto del sistema è risolvere i problemi in IEEE, ma ciò significa che è necessariamente incoerente con esso. Questa è una di dette incoerenze. E la ragione per cui esiste un sistema integrato proposto per usare vecchi standard nel suo libro.
Ordous,

Risposte:


3

Troppo lungo per un commento, quindi scrivilo come una risposta ...

Il problema con IEEE è che abbiamo tre casi da differenziare, ma solo due rappresentazioni per questi:

  • valore negativo, valore assoluto troppo piccolo per rappresentare - questo è rappresentato da IEEE -0.0 e potrebbe essere facilmente mappato (-smallsubnormal,0)
  • valore esattamente nullo, rappresentato da IEEE 0.0, mappato a 0
  • valore positivo troppo piccolo per rappresentare; questo ha IEEE rappresentazione 0.0 così ma deve essere mappato (0, +smallsubnormal).

Il problema ora non è lo zero negativo, ma che non possiamo differenziare se un IEEE 0.0 è il secondo o il terzo caso! In altre parole: la funzione di mappatura da UNUM a IEEE non è biiettiva - e non lo sarà mai, come per qualsiasi altro valore IEEE, non sappiamo mai se è l'esatto o l'intervallo!

Quindi penso che sia assolutamente corretto mappare -0.0 a (-smallsubnormal,0), e dobbiamo decidere se IEEE 0.0 è piuttosto da mappare 0o forse meglio (0, +smallsubnormal). Personalmente tendo al primo, ma non è molto autorevole ...

Per quanto riguarda il confronto con IEEE (-0,0 essendo uguale a 0,0): non si dovrebbe (quasi) mai e poi mai confrontare per l'uguaglianza esatta (operatore C o C ++: ==), ma solo perché il valore assoluto della differenza è inferiore a qualche soglia appropriata. Questo problema viene eliminato solo parzialmente anche con UNUMS, poiché ora possiamo confrontare per l'uguaglianza esatta, se l'u-bit non è impostato, ma con l'impostazione, non sappiamo ancora ...

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.