Я пытаюсь вычислить большие целые числа с типом данных long long
, но когда он становится достаточно большим (2^55
), арифметическое поведение непредсказуемо.Я работаю в Microsoft Visual Studio 2017.
В этом первом случае я вычитаю 2
из long long
переменной m
при инициализации.Это прекрасно работает для всех 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;
}
Я ожидаю, что оба кода эквивалентны, почему это не так?