Вы уверены, что %llu
печатает разумный дубль?
lpPerformanceCount.QuadPart / lpFrequency.QuadPart
дает вам время, округленное до полных секунд.
lpPerformanceCount.QuadPart % lpFrequency.QuadPart
дает вам счетчик тиков (число тиков с последней полной секунды).
Добавление счетчика ко времени дает вам ... как выразить это вежливо ... дерьмо.
Я всегда использую двойную арифметику, гораздо меньше хлопот.Однако, если вы настаиваете на коде, отличном от FPU, вы можете использовать:
count.QuadPart*1000000 / (freq.QuadPart*1000000)
, который будет переполняться быстрее (хотя я полагаю, что это не практическая проблема).Исправление для целочисленной арифметики:
count.QuadPart / freq.QuadPart
+ (count.QuadPart % freq.QuadPart) * 1000000 / freq.QuadPart
(я надеюсь это верно ...)