Мы знаем, что -2 * 4 ^ 31 + 1 = -9.223.372.036.854.775.807, самое низкое значение, которое вы можете хранить долгое время, как сказано здесь: Что диапазон значений может хранить целые типы в С++. Поэтому у меня есть эта операция:
#include <iostream>
unsigned long long pow(unsigned a, unsigned b) {
unsigned long long p = 1;
for (unsigned i = 0; i < b; i++)
p *= a;
return p;
}
int main()
{
long long nr = -pow(4, 31) + 5 -pow(4,31);
std::cout << nr << std::endl;
}
Почему он показывает -9.223.372.036.854.775.808 вместо -9.223.372.036.854.775.803? Я использую Visual Studio 2015.