随着Fibonacci序列中数字变大,输出奇怪

时间:2013-06-24 16:18:15

标签: c++

我注意到在我的斐波那契序列中我得到负数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 << " ";
}

3 个答案:

答案 0 :(得分:2)

我敢打赌它确实与int的范围有关。你可能已经满溢了

一个整数通常有32位,其中一个位是符号,所以如果你有一个像

这样的数字
01111111111111111111111111111111

有点超过20亿,你向它添加2,然后你得到

10000000000000000000000000000001

是负数(第一个数字是符号,0表示正数,1表示负数)

如果您想存储更多数字,可以使用长整数。

答案 1 :(得分:2)

是的,这与int的有限范围有关。这称为翻转溢出,其工作方式与您车内的里程表相似。一旦数字超过其最高可能值,它就会翻转到其最低可能值(int为负数)。考虑使用unsigned intlong unsigned int,但第二个不是必须更长(它取决于平台)。 long double可以容纳更大的数字。如果您想使用任意大数(尽可能大),您可以在this question的答案中找到合适的库。

答案 2 :(得分:0)

尝试使用&#34; long int&#34;而不是&#34; int&#34;。