为什么函数不给出整数溢出

Đum*_*lav 1 c++ pascal function fibonacci

我用C++和Pascal编写了函数,给出了第n个Fibbonacci数.正如预期的大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;
}
Run Code Online (Sandbox Code Playgroud)
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.
Run Code Online (Sandbox Code Playgroud)

das*_*ght 7

未定义的结果不一定是随机的.当您使用相同的初始条件在同一平台上执行相同的计算时,即使它不正确,您也会得到相同的结果.

在你的情况Pascal和C++程序使用相同的底层硬件与相同的表示int64long long,他们指示硬件执行的数学运算上开始相同的数字相同的序列.因此,它们确实到达相同的数字,代表了这一系列操作的最终结果.

结果仍未定义,因为如果您在不同的平台上运行相同的计算,或者甚至在相同的平台上但使用不同的编译器设置,则可能会得到完全不同的错误结果.