2013-08-23 19 views
7

mam następujący program:LCC printf zmiennoprzecinkowych

#include <stdio.h> 

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

Wynikiem jest:

0.009990 
9.999900e-001 

Dlaczego pierwsza liczba źle? Używam Windows XP, kompilatora "Logiciels Informatique lcc-win32 wersja 3.8. Data kompilacji: 30 listopada 2012 19:38:03".

+0

Czy używasz [lcc] (http://en.wikipedia.org/wiki/LCC_ (kompilator)) lub jego pochodnej [lcc-win] (http://www.cs.virginia.edu/~lcc -win32 /)? Czy masz ten sam problem, jeśli dodasz #include ? (To nie jest tylko problem precyzji, wyjście jest wyłączone przez współczynnik 100.) –

+0

Kiedy używam printf ("% e \ n", 0.99999); Odpowiedź jest poprawna 9.999900e-001 Problem występuje tylko dla określonych liczb. – user2712052

+0

Używam lcc-win, i tak jest wliczony w cenę. – user2712052

Odpowiedz

2

Ten program jest prawidłowy, a jego wyjście powinno być:

0.999990 
9.999900e-01 

lub coś bardzo podobny do tego.

(Nie używać args lub argv oraz nazwa zwyczajowa dla pierwszego parametru main jest argc zamiast args, ale żadna z nich nie jest to problem, który powinien wpłynąć na zachowanie Twojego programu.)

To wygląda na to, że znalazłeś błąd w implementacji, prawdopodobnie w bibliotece środowiska wykonawczego, a nie w samym kompilatorze. W moich krótkich wyszukiwaniach w Google nie znalazłem odniesienia do tego konkretnego błędu (w rzeczywistości największym trafieniem było to pytanie).

Sugeruję skontaktowanie się z opiekunem programu lcc-win; dane kontaktowe znajdują się pod numerem web site. Krótki opis i link do tego pytania powinny dostarczyć wystarczającej ilości informacji, przynajmniej na początek.