谁能破译为什么这两个转换为unsigned long long给出不同的结果?

LARGE_INTEGER lpPerformanceCount, lpFrequency; QueryPerformanceCounter(&lpPerformanceCount); QueryPerformanceFrequency(&lpFrequency);

(Count.QuadPart是一个很长很长呈现出CPU计数)

(Freq.QuadPart是伯爵的长长出频率第二)

尝试实时打印微秒。

稳定的输出:

printf("%llu\n", ((long double)lpPerformanceCount.QuadPart/ lpFrequency.QuadPart) * 1000000);

不稳定输出(结果跳转语无伦次前后即使它的第一眼理智)

printf("%llu\n", 1000000 * (lpPerformanceCount.QuadPart / lpFrequency.QuadPart) + (lpPerformanceCount.QuadPart % lpFrequency.QuadPart));

编辑:printf的需要进一步的(无符号很长很长),在其输入转换,原来的代码有这样做的一个FUNC的返回值。

--------------解决方案-------------

你确定%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

希望这是正确的...)

是。 IIUC,它应该是这样的:

1000000 * (lpPerformanceCount.QuadPart / lpFrequency.QuadPart) +
(lpPerformanceCount.QuadPart % lpFrequency.QuadPart) * 1000000 / lpFrequency.QuadPart

或者可能

(lpPerformanceCount.QuadPart / (lpFrequency.QuadPart / 1000000) )

第一个会溢出,如果lpFreuency.QuadPart高; 第二个是不准确的,甚至溢出,如果lpFrequency.QuadPart低。

分类:C# 时间:2015-03-15 人气:0
本文关键词: WINAPI,C#,窗口
分享到:

相关文章

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 0.193 (s). 10 q(s)