Я написал простую функцию в C ++ для вычисления объема объекта Box, который имеет длину, ширину и высоту. Это часть класса, поэтому l,b,h
являются частными членами:
long long CalculateVolume(){
return l*b*h;
}
Это не работает правильно с большими значениями l,b,h
. В моем случае l = 1039, b = 3749, h = 8473
. Результат был
-1355615565
Я думал, что это из-за переполнения, поэтому я попытался
unsigned long long CalculateVolume(){
return l*b*h;
}
, но результат был
18446744072353936051
Наконец, все получилось умножить целые числа на шаги:
long long CalculateVolume(){
long long result = l;
result *= b;
result *= h;
return result;
}
, что дало правильный результат 33004122803
. Я не понимаю, почему это решение работает. Можете ли вы объяснить, что происходит под капотом в каждом из трех случаев? Спасибо!