По какой-то причине простая тестовая программа генерирует деление на ноль ошибок, даже если деление на ноль невозможно, насколько я могу сказать:
#include <iostream>
using namespace std;
int main()
{
int Level = 1;
int EXPTNL = 0;
cout << Level << endl;
EXPTNL = (Level * 1250) * 1000 * 1000 * Level / (2 / ((1000 * (Level * 1250)) / 2));
cout << EXPTNL << endl;
system("Pause");
}
Я что-то пропустил? Эта точно такая же формула прекрасно работает в другой, гораздо более сложной программе.
Это почти наверняка приведет к нулевому значению:
(2 / ((1000 * (Level * 1250))
если level
ненулевой, 1000 * (Level * 1250)
, намного больше 2, что при целочисленном делении даст результат ноль.
Возможно, вы хотите использовать значение с плавающей запятой, чтобы ваш EXPTNL стал вычислением с плавающей запятой, а затем сделать его целым числом в конце.
Я также ожидаю, что (Level * 1250) * 1000 * 1000 будет переполнять 32-разрядное целое число, так что вы, вероятно, захотите это как вычисление с плавающей запятой.
Просто сделайте каждое из 1250 значений в 1250.0 и проблема решена.
Это целочисленное деление:
2 / ((1000 * (Level * 1250)) / 2)
и, поскольку величина знаменателя больше, чем у числителя, вы получите 0.
Было бы легко проверить это:
std::cout << (2 / ((1000 * (Level * 1250)) / 2)) << std::endl;
Вам нужно деление с плавающей запятой, которое вы можете получить, имея число с плавающей запятой в числителе или знаменателе (или обоих).