Используя '/' с длинным двойным? - PullRequest
6 голосов
/ 06 февраля 2012

Я пытаюсь понять, почему использование '/' с long double следующим образом приводит к значению 0.000000, тогда как тот же код с double не

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

Дает значение 0,785403, но

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

Дает значение 0,000000. Я пытаюсь получить наиболее точное значение для 'total_results / total_points'

РЕДАКТИРОВАТЬ: В конце концов, ошибка заключалась в том, что я выводил его, используя «% f» вместо «% Lf»

до

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

* После 1014 *

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

1 Ответ

15 голосов
/ 06 февраля 2012

Это, очевидно, только предположение, но как вы выводите результаты? Если вы используете printf с неправильным спецификатором поля, печать ошибочного нуля, безусловно, является возможным результатом. Используя g ++, я попытался "% lf" и получил "-2.0000", когда я должен был получить "0.75" Правильный спецификатор - "% Lf" с большой буквы L.

...