2015-11-28 19 views
7

So che IEEE 754 definisce NaNs di avere la seguente rappresentazione bit a bit:Quali usi hanno i payload in virgola mobile NaN?

  • Il bit di segno può essere sia 0 o 1
  • Il campo esponente contiene tutti 1 bit
  • Alcuni bit della mantissa sono usato per specificare se si tratta di un NaN silenzioso o di segnalazione NaN
  • La mantissa non può essere tutti 0 bit perché quel modello di bit è riservato per rappresentare l'infinito
  • I restanti bit della mantissa formare un payload

Il payload si propaga (come è il NaN nel suo complesso) al risultato di un calcolo in virgola mobile quando l'ingresso del calcolo è NaN, se non ho conoscenza dei dettagli di questa propagazione o se lo standard specifica come farlo. Chi imposta il carico utile originale? Cosa succede se aggiungo due NaN con payload diversi?

Ma la cosa più importante: non ho mai visto i payload NaN usati prima. Quali usi ha questo campo di carico utile?

+3

Ho sentito parlare del payload utilizzato per rispondere perché un NaN è stato generato in primo luogo. ('0/0',' oo-oo', funzione valutata in pole, ecc.) Ho anche sentito voci non confermate che almeno un programma utilizza il payload sNaN (51 bit) come puntatore (48 bit) per un "ripiego" di sorta all'aritmetica di precisione arbitraria. – tmyklebu

+0

la specifica definisce anche quando viene creata una nan, segnalando nans vs quiet nans. L'idea è quindi non devi controllare dopo ogni operazione se c'è stato un overflow o underflow o dividi per zero o qualsiasi cosa tu possa guardare il risultato finale e vedere che il calcolo ha avuto un problema ad un certo punto. –

+0

sì, appena controllato, elenca diverse situazioni in cui il risultato corretto è un NaN. (non necessariamente quelli che ho elencato nel commento sopra) –

risposta

6

E 'stato pensato per essere una buona idea whenIEEE754 e Nan sono stati sviluppati. In realtà ho visto che era solito memorizzare il motivo per cui è stato creato un NaN.

Oggi, non lo userei in codice portatile per diversi motivi. Sei sicuro che questo payload sopravviverà ad esempio ad un incarico? Se assegni x = y, quanto sei sicuro che x abbia lo stesso carico utile NaN come y? E quanto sei sicuro che sopravviverà all'aritmetica? Se a o b è un NaN, allora un op b dovrebbe essere l'unico NaN, o uno dei due NaN se entrambi sono NaN. Sicuro che questo è il caso? Non sarei disposto a scommettere su di esso.

+4

Va anche notato che IEEE-754 (2008) non * ordina * payload NaN, ma semplicemente * li consiglia *. L'uso di un singolo pattern canonico NaN (sia in un sapore SNaN che QNaN) sarebbe conforme allo standard. Vedere la sezione 6.2 dello standard, in particolare (enfasi sul mio): "Per facilitare la propagazione delle informazioni diagnostiche contenute nei NaN, molte delle informazioni possibili * dovrebbero * essere conservate nei risultati delle operazioni di NaN." – njuffa

Problemi correlati