我注意到在我的斐波那契序列中我得到负数after a certain point:
267914296 433494437 701408733 1134903170
1836311903 -1323752223 512559680 -811192543 -298632863
这是否与“int”的有限范围有关?或者我的代码有问题吗?
以下是代码:
using std::cout;
int main()
{
int n = 50, f1 = 0, f2 = 1, fn = 0, i = 0;
cout << "0 ";
for (i = 0; i < n; i++)
{
fn = f1 + f2;
f2 = f1;
f1 = fn;
cout << fn << " ";
}
答案 0 :(得分:2)
我敢打赌它确实与int的范围有关。你可能已经满溢了
一个整数通常有32位,其中一个位是符号,所以如果你有一个像
这样的数字01111111111111111111111111111111
有点超过20亿,你向它添加2
,然后你得到
10000000000000000000000000000001
是负数(第一个数字是符号,0表示正数,1表示负数)
如果您想存储更多数字,可以使用长整数。
答案 1 :(得分:2)
是的,这与int
的有限范围有关。这称为翻转或溢出,其工作方式与您车内的里程表相似。一旦数字超过其最高可能值,它就会翻转到其最低可能值(int
为负数)。考虑使用unsigned int
或long unsigned int
,但第二个不是必须更长(它取决于平台)。 long double
可以容纳更大的数字。如果您想使用任意大数(尽可能大),您可以在this question的答案中找到合适的库。
答案 2 :(得分:0)
尝试使用&#34; long int&#34;而不是&#34; int&#34;。