gpt4 book ai didi

c - 如何处理C中的溢出

转载 作者:太空狗 更新时间:2023-10-29 15:02:14 25 4
gpt4 key购买 nike

我是编程的新手,今天我只是在玩编码,尝试使用函数,我编写了一段简单的代码,解决了我在其中一个类(class)中遇到的数学问题。它基本上采用公式(细菌数量)* 2^hours 并进行计算。

我的问题是,当我得到一个非常大的数字时,它不会正确返回,我总是在一定大小的数字后返回 -2147483648。我猜这与溢出有关,但我不是 100% 确定它是如何工作的。我想弄清楚的是如何在遇到此溢出后获得我正在寻找的实际数字。那么如何处理溢出呢?

我最初只是将所有内容都设置为 int,但经过一些阅读后我认为也许将所有内容更改为 long 可能会对我有所帮助,但事实并非如此,如果这对我来说是一件糟糕的事情,请继续告诉我!另外,我使用的测试编号是 1500 和 24,它们总是返回上面的数字。

这是代码谢谢!

#include<stdio.h>
#include<math.h>
long bacteria(long b, long h);

int main(void)
{
long f,g;

scanf("%ld%ld",&f,&g);
f = bacteria(f,g);
printf("%ld\n",f);

return 0;
}

long bacteria(long b,long h)
{
long d;
printf("%ld %ld\n",b,h);
d = b * (pow(2,h));

return d;
}

最佳答案

是的,您对溢出的怀疑是正确的。 C 数据类型有一定的范围。你需要使用一些 bignum library处理您需要更广泛范围的情况。另请注意,pow 会返回 double 而不是您可能期望的 long

如果您不关心精度,您可以使用 double 而不是 long,它的范围更广。

Live example here

关于c - 如何处理C中的溢出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26270787/

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