Используя pow()
из библиотеки <cmath>
, я получаю отрицательное число для некоторых чисел.Почему pow() в C++ возвращает отрицательный номер
2601*((int)pow(10.0,3*2)) = -1693967296
Почему это так? Это связано с тем, что int
имеет диапазон от -32767 до 32767? Или это из-за кастинга?
Int32 обертывает –
целочисленное переполнение .. цифры намного больше и округляются до большого отрицательного числа при переполнении, если int подписан. –
Если вам нужно выполнить этот вид вычислений без переполнения, вам понадобится Арифметика больших чисел: http://www.cs.utexas.edu/users/djimenez/utsa/cs3343/lecture20.html – user2346536