gpt4 book ai didi

c++ - 为什么函数不给出整数溢出

转载 作者:太空宇宙 更新时间:2023-11-03 10:23:59 25 4
gpt4 key购买 nike

我用 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.

最佳答案

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

在您的情况下,Pascal 和 C++ 程序使用相同的底层硬件,具有相同的 int64long long 表示,并且它们指示硬件执行相同的序列对开始相同的数字进行数学运算。因此,它们确实会得出相同的数字,代表这一系列操作的最终结果。

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

关于c++ - 为什么函数不给出整数溢出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47738707/

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