gpt4 book ai didi

c++ - 为什么我的 long long int 算术会以这种方式表现?

转载 作者:IT老高 更新时间:2023-10-28 12:40:09 25 4
gpt4 key购买 nike

我正在尝试使用 long long 数据类型计算大整数,但是当它变得足够大 (2^55) 时,算术行为是不可预测的。我在 Microsoft Visual Studio 2017 工作。

在第一种情况下,我在初始化中从 long long 变量 m 中减去 2。这适用于所有 n,直到我尝试 54,然后 m 将不会被 2 减去。

#include <iostream>
#include <string>
#include <algorithm>
#include <vector>
#include <map>
#include <set>

using namespace std;

#define LL long long

int main()
{
LL n;
cin >> n;
LL m = pow(2, n + 1) - 2;
cout << m;
return 0;
}

但是,使用此代码 m 确实会被 2 减去,并且可以正常工作。

#include <iostream>
#include <string>
#include <algorithm>
#include <vector>
#include <map>
#include <set>

using namespace std;

#define LL long long

int main()
{
LL n;
cin >> n;
LL m = pow(2, n + 1);
m -= 2;
cout << m;
return 0;
}

我希望两个代码是等效的,为什么不是这样?

最佳答案

问题

LL m = pow(2, n + 1) - 2;

pow(2, n + 1) 不是 long long。它的类型是 double (引用 cppreference ),因为值太大,从它减去 2 不会改变它的值。这意味着 m 不会有正确的值。正如您已经发现的那样,您需要先分配结果,然后再进行减法。另一种选择是编写您自己的 pow,当给定整数类型时将返回整数类型,这样您就可以同时进行幂和减法的提升。

关于c++ - 为什么我的 long long int 算术会以这种方式表现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55971072/

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