gpt4 book ai didi

c - 一定限度后结果不同

转载 作者:行者123 更新时间:2023-11-30 14:52:07 25 4
gpt4 key购买 nike

我正在做一些练习。有一个问题,你必须计算前 N 个自然数(我们称之为 x)的平方和以及前 N 个自然数(我们称之为 y)的平方和。最后你想要的是 y-x 之差。

我做了以下事情:

unsigned long long sumsquar(int limit){
unsigned long long sum = 0;
for(int i=1; i<limit+1; i++){
sum += (i*i);
}
return sum;
}

unsigned long long squarsum(int limit){
unsigned long long sum=0;
for(int i=1; i<limit+1; i++){
sum+=i;
}
return (sum*sum);
}


int main(void)
{
int limit = 1024;
unsigned long long sum1 = squarsum(limit);
unsigned long long sum2 = sumsquar(limit);
unsigned long long erg1 = squarsum(limit)-sumsquar(limit);
printf("%llu\n", erg1);
unsigned long long sum = (limit*(limit+1))/2;
unsigned long long sum_sq = ((2*limit+1)*(limit+1)*limit)/6;
unsigned long long erg2 = (sum*sum)-sum_sq;
printf("%llu\n", erg2);
return 0;
}

简短说明:我有两个函数 sumsquar 和 squaresum 计算 x 和 y。

出于比较的原因,我还包括了“return 0”上方的 4 行,因为使用此解决方案速度要快得多。

现在的问题是,对于 Ns(此处为限制)为 1023,我得到相同的结果,但如果限制 >1023,则结果不同。为什么会这样?

顺便说一句,很抱歉这个丑陋的标题,但我不知道在那里用什么......

最佳答案

考虑到您拥有 32 位或 64 位系统,Int 的大小为 4 字节(int 的大小实际上取决于编译器。在过去,当处理器为 16 位时,int 为 2 字节)。所以最大值限制为 0x7fffffff。

其中 unsigned long long 至少为 64 位或更大。

在您的情况下,当 N > 303 时, int 不足以容纳 sumsqare() - 因此,如果您将 int 用于 N>303 ,您的结果将不正确。如果你使用64位,你可以使用更高的N值。(仍然会有限制)

关于c - 一定限度后结果不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47742125/

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