gpt4 book ai didi

c++ - 谁能解释为什么这两个转换为 unsigned long long 会产生不同的结果?

转载 作者:可可西里 更新时间:2023-11-01 12:09:05 28 4
gpt4 key购买 nike

LARGE_INTEGER lpPerformanceCount, lpFrequency;

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

(Count.QuadPart 是一个显示 CPU 计数的 long long)

(Freq.QuadPart是一个long long,表示秒数的频率)

尝试实时打印微秒。

稳定输出:

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

不稳定的输出:(结果不连贯地前后跳跃,即使乍一看是正常的)

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

编辑:printf 需要在其输入中进行进一步的(unsigned long long)转换,原始代码是通过函数的返回值完成的。

最佳答案

你确定 %llu 打印出一个合理的 double 吗?

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

(我希望是对的...)

关于c++ - 谁能解释为什么这两个转换为 unsigned long long 会产生不同的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3439560/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com