【发布时间】:2017-12-10 12:10:59
【问题描述】:
我用 C++ 和 Pascal 编写了函数,可以给我第 n 个斐波那契数。正如预期的大 n 值(n>92,因为即使 f(93) > 2^63+1) 我得到的结果也不正确。
但是当我将它们比较相同的 n 时,我会在两种语言中得到相同的结果。
这与我会得到一些随机数的想法相反。
我想知道为什么我得到相同的结果以及为什么我一开始没有得到整数溢出。
谁能给我解释一下?
代码:
#include <iostream>
#include <cmath>
#include <iomanip>
using namespace std;
long long fibo(int n){
long long a1,a2,pom;
int i=1;
a1 = 0; a2 = 1;
while(i<=n){
pom = a2;
a2 = a1 + a2;
a1 = pom;
i++;
}
return a1;
}
int main(){
int n;
cin >> n;
cout << "Function: "<< setprecision(50) << fibo(n) << endl;
}
Program AddNums(output);
function fibo(n:integer):int64;
var
a1,a2,pom:int64;
i:integer;
begin
a1:=0;a2:=1;i:=1;
while(i<=n)do
begin
pom:= a2;
a2:= a1 + a2;
a1:= pom;
inc(i);
end;
fibo:=a1;
end;
var
n:integer;
begin
readln(n);
writeln(fibo(n));
end.
【问题讨论】:
-
什么是整数溢出?恐怕C++中没有这样的东西。
-
听起来你不太明白整数溢出是如何工作的——当溢出发生时,结果是不正确的,但不是随机。
-
@user0042 - 不过,标准确实谈到了它。
-
使用模运算可以计算结果。哪一个有偏差?
标签: c++ function pascal fibonacci