Переполнение (overflow) типа int при расчете стоимости оружия
Описание проблемы
При вводе большой цены за единицу оружия или большого количества экземпляров происходит переполнение 32-битного целочисленного типа (int), что приводит к:
Некорректному отображению стоимости
Возможным сбоям в расчетах
Отрицательным значениям в итоговой стоимости
В результате unit - теста ошибки выявлены. Программа работает не совсем корректно!
void testGunCostOverflowCheck() { int price = 100000; int count = 24000;
int cost = price * count; // Потенциальное переполнение
qint64 correct = static_cast<qint64>(price) * count;
if (cost != correct) {
qDebug() << "Overflow detected: price =" << price << ", count =" << count
<< ", result =" << cost << ", expected =" << correct;
QFAIL("Integer overflow occurred in cost calculation.");
}
}
Ожидаемый результат: Общая стоимость отображается корректно: AK-47 x1000000 | Цена: 24000 | Общая стоимость: 2 400 000 000
Фактический результат:
Общая стоимость отображается как отрицательное число (например, -1486618624).
Или возникает неверный расчет из-за переполнения.
Причина ошибки
В исходной реализации использовался int (32-битное число).
Максимальное значение int = 2 147 483 647.
При умножении цена × количество (например, 2 000 000 000 × 1 000 000) результат превышает максимальное значение int, что вызывает переполнение.