2014-06-18 13 views
5

Sto imparando a conoscere i linguaggi di programmazione ora (BNF, scanner, ecc.) E sembra strano che le costanti in virgola mobile esadecimale in C richiedano un esponente.Perché il punto mobile esadecimale deve avere un esponente specificato?

Dalla serie C99,

§6.4.4.2 galleggianti costanti

hexadecimal-floating-constant: 
    hexadecimal-prefix hexadecimal-fractional-constant 
     binary-exponent-part floating-suffix[opt] 
    hexadecimal-prefix hexadecimal-digit-sequence 
     binary-exponent-part floating-suffix[opt] 

Sembra facile scrivere uno scanner in grado di analizzare le costanti in virgola esadecimale galleggianti con un esponente opzionale. Perché lo standard C rende l'esponente opzionale per i punti decimali mobili e richiesto per i punti esagonali mobili?

risposta

7

Questo è trattato nel C99 Rationale, sezione 6.4.4.2:

Una nuova funzionalità di C99: C99 aggiunge notazione esadecimale perché più esprime chiaramente il significato delle costanti galleggianti. è necessaria la parte binario esponente, anziché opzionale come per notazione decimale, per evitare ambiguità risultante da un suffisso f essendo scambiato come una cifra esadecimale.

Ad esempio, 1.0f è un virgola mobile decimale costante di tipo float, ma 0x1.0f sarebbe ambiguo, e deve essere scritto come 0x1.0p0f.

Per lo stesso motivo, l'esponente è introdotta da p anziché e perché e è una cifra esadecimale valido.

Problemi correlati