2013-08-23 10 views
7

Ho seguente programma:LCC printf in virgola mobile

#include <stdio.h> 

int main(int args, char *argv[]) { 
    printf("%f\n", 0.99999); 
    printf("%e\n", 0.99999); 
} 

Il risultato è:

0.009990 
9.999900e-001 

Perché è il primo numero che non va? Io uso Windows XP, compilatore "Logiciels Informatique lcc-win32 versione 3.8. Data di compilazione: 30 nov 2012 19:38:03".

+0

Si sta utilizzando [lcc] (http://en.wikipedia.org/wiki/LCC_ (compiler)) o la sua derivata [lcc-win] (http://www.cs.virginia.edu/~lcc -Win32 /)? Hai lo stesso problema se aggiungi #include ? (Non si tratta solo di un problema di precisione, l'uscita è disattivata di un fattore 100.) –

+0

Quando uso printf ("% e \ n", 0.99999); La risposta è corretta 9.999900e-001 Il problema si verifica solo per numeri specifici. – user2712052

+0

Io uso lcc-win, e sì lo è incluso. – user2712052

risposta

2

Tale programma è corretta, e la sua uscita dovrebbe essere:

0.999990 
9.999900e-01 

o qualcosa di molto simile a quella.

(non si utilizza args o argv, e il nome usuale per il primo parametro di main è argc piuttosto che args, ma nessuno di questi è un problema che dovrebbe influenzare il comportamento del programma.)

E ' sembra che tu abbia trovato un bug nella tua implementazione, probabilmente nella libreria di runtime piuttosto che nel compilatore stesso. Le mie brevi ricerche su Google non hanno trovato un riferimento a questo particolare bug (in effetti, il risultato più importante era questa domanda).

Suggerisco di contattare il manutentore di lcc-win; le informazioni di contatto sono nello web site. Una breve descrizione e un link a questa domanda dovrebbero fornire informazioni sufficienti, almeno per iniziare.