2012-02-06 9 views
6

sto cercando di capire perché usando '/' con una lunga doppia nel seguente modo porta ad un valore 0.000000 mentre lo stesso codice con doppio noUtilizzo di "/" con doppio lungo?

double d = (double)total_results/(double)total_points; 

Dà il valore 0,785,403 mila ma

long double d = (long double)total_results/(long double)total_points; 

Fornisce il valore 0,000000. Sto cercando di ottenere il valore più accurato per

EDIT 'TOTAL_RESULTS/total_points': Alla fine l'errore era semplicemente che stavo output utilizzando '% f' invece di '% Lf'

Prima

printf("Running on %d thread(s), results is %f.\n", NUM_THREADS, d);  

Dopo

printf("Running on %d thread(s), results is %Lf.\n", NUM_THREADS, d); 
+0

quale piattaforma/compilatore? – CharlesB

+1

Quali sono i tipi di total_results e total_points? Lanciarli a 'long double' potrebbe cambiare il valore in modo errato – Eregrith

+0

Funziona per me in C++ –

risposta

15

Questo è ovviamente solo una supposizione, ma come stai emettendo i risultati? Se si utilizza printf con l'identificatore di campo errato, la stampa di uno zero errato è sicuramente un risultato possibile. Usando g ++, ho provato "% lf" e ho ottenuto "-2.0000" quando avrei dovuto ottenere "0.75". Lo specificatore corretto è "% Lf", con una maiuscola L.

+0

Sì o '% llf', anche questo funziona. (sotto gcc 4.3, almeno Linux) –

+0

Questo era il problema. Stavo usando '% f'. Grazie – Shane

+1

@MrLister: il commento non è utile; sta solo insegnando a OP il ** modo sbagliato ** di fare qualcosa e apparentemente ha funzionato, quando la ** risposta ** giusta è già stata data. –

Problemi correlati