gpt4 book ai didi

c - 计算上限和下限时出现奇怪的错误

转载 作者:行者123 更新时间:2023-12-01 06:36:57 25 4
gpt4 key购买 nike

我的程序是多线程的。每个线程负责一定的数据 block 。我正在做的是计算下限和上限,然后通过结构将它们传递给线程函数。 lower_bound 和 upper_bound 都是无符号整数。

主线程有如下下界和上界。

lower_bound: 3;
upper_bound: (NUM/num_threads) - 1;

其他工作线程具有以下下限和上限。

lower_bound = (NUM * (i + 1))/(num_threads);
upper_bound = (NUM * (i + 2))/(num_threads) - 1;

NUM 是我程序中定义的常量。我注意到该程序在一定数量级内运行良好。 10^8 可以正常工作,但 10^9 不行。为了调试我的程序,我让工作线程打印出它们的输出。

10 个线程的输出高达 10^8。

lower_bound: 10000000    upper_bound: 19999999
lower_bound: 20000000 upper_bound: 29999999
lower_bound: 30000000 upper_bound: 39999999
lower_bound: 60000000 upper_bound: 69999999
lower_bound: 70000000 upper_bound: 79999999
lower_bound: 50000000 upper_bound: 59999999
lower_bound: 80000000 upper_bound: 89999999
lower_bound: 40000000 upper_bound: 49999999
lower_bound: 90000000 upper_bound: 99999999

10 个线程的输出高达 10^9。

lower_bound: 100000000   upper_bound: 199999999
lower_bound: 200000000 upper_bound: 299999999
lower_bound: 300000000 upper_bound: 399999999
lower_bound: 70503270 upper_bound: 170503269
lower_bound: 170503270 upper_bound: 270503269
lower_bound: 270503270 upper_bound: 370503269
lower_bound: 370503270 upper_bound: 41006539
lower_bound: 41006540 upper_bound: 141006539
lower_bound: 400000000 upper_bound: 70503269

世界上发生了什么事?

最佳答案

整数溢出。你有一个无符号的 32 位整数,它的最大值略高于 40 亿。之后它会绕圈并再次从零开始。

改为使用 64 位整数(uint64_tunsigned long long)。

关于c - 计算上限和下限时出现奇怪的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13466206/

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