Я пытаюсь вычислить большие целые числа с 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;
}
Я ожидаю, что оба кода будут эквивалентны, почему это не так?