2012-06-07 11 views
9

DrRacket che esegue R5RS afferma che 1### è un numero di schema perfettamente valido e stampa un valore di 1000.0. Questo mi porta a credere che i segni di cancelletto (#) specificano l'inesattezza in un numero, ma non ne sono certo. La specifica dice anche che è una sintassi valida per un numero letterale, ma non dice cosa significano quei segni.Significato di # in Numero di numeri letterali

Qualche idea su cosa significano i # segni nello schema numero letterale?

risposta

12

La sintassi dell'hash è stata introdotta nel 1989. Vi è stata una discussione su numeri inesatti sulla mailing list degli autori di Scheme, che contiene molte belle idee. Alcuni catturati e altri no.

http://groups.csail.mit.edu/mac/ftpdir/scheme-mail/HTML/rrrs-1989/msg00178.html

Un'idea che bloccato è stata l'introduzione del # riposare per una cifra sconosciuta. Se si dispone di una misurazione con due cifre significative, è possibile indicare che con 23## sono note le cifre 2 e 3, ma che le ultime cifre sono sconosciute. Se scrivi 2300, allora non puoi vedere che i due zero non sono considerati affidabili. Quando ho visto la sintassi mi aspettavo che 23## valutasse il 2350, ma (credo) l'interpretazione dipende dall'implementazione. Molti implementazione interpretano 23## come 2300.

La sintassi è stato introdotto formalmente qui:

http://groups.csail.mit.edu/mac/ftpdir/scheme-mail/HTML/rrrs-1989/msg00324.html

EDIT

Da http://groups.csail.mit.edu/mac/ftpdir/scheme-reports/r3rs-html/r3rs_8.html#SEC52

un tentativo di produrre più cifre che sono disponibili in la rappresentazione interna della macchina di un numero sarà contrassegnata con un "#" riempiendo le cifre in più. Questa non è una dichiarazione che l'attuazione sa o registra il significato di un numero, basta che la macchina sarà tentativi di bandiera per la produzione di 20 cifre di un numero che ha solo 15 cifre della rappresentazione macchina:

3 .14158265358979 #####; (Flo 20 (esattezza s))

EDIT2

Gerald Jay Sussman scrive il motivo per cui l'ha introdotto la sintassi qui:

http://groups.csail.mit.edu/mac/ftpdir/scheme-mail/HTML/rrrs-1994/msg00096.html

+0

+1, molto più utile della mia, ma io' Lasceremo per i collegamenti. Questo è specificato altrove in RnRS? –

+1

È difficile trovare molto. Un bocconcino è tratto dal manuale R3RS nella sezione formato. Se viene richiesta un'implementazione per scrivere un numero di 20 cifre, ma sono note solo 15 cifre nella rappresentazione interna, allora può scrivere # al posto delle cifre sconosciute. Poiché 'write' può produrre questi numeri, anche la procedura' read' deve gestirli. – soegaard

7

Ecco la documentazione R4RS e R5RS per quanto riguarda le costanti numeriche:

Vale a dire:

Se la rappresentazione scritta di un numero ha alcun prefisso esattezza, la costante può essere sia inesatte o esatto. Non è esatto se contiene un punto decimale, un esponente o un carattere "#" al posto di una cifra, altrimenti è esatto.

Non sono sicuro che intendano qualcosa oltre a quello, diverso da 0.

Problemi correlati