Деление по нулевой ошибке в простой программе

По какой-то причине простая тестовая программа генерирует деление на ноль ошибок, даже если деление на ноль невозможно, насколько я могу сказать:

#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");
}

Я что-то пропустил? Эта точно такая же формула прекрасно работает в другой, гораздо более сложной программе.

-3

Решение

Это почти наверняка приведет к нулевому значению:

(2 / ((1000 * (Level * 1250))

если level ненулевой, 1000 * (Level * 1250), намного больше 2, что при целочисленном делении даст результат ноль.

Возможно, вы хотите использовать значение с плавающей запятой, чтобы ваш EXPTNL стал вычислением с плавающей запятой, а затем сделать его целым числом в конце.

Я также ожидаю, что (Level * 1250) * 1000 * 1000 будет переполнять 32-разрядное целое число, так что вы, вероятно, захотите это как вычисление с плавающей запятой.

Просто сделайте каждое из 1250 значений в 1250.0 и проблема решена.

2

Другие решения

Это целочисленное деление:

2 / ((1000 * (Level * 1250)) / 2)

и, поскольку величина знаменателя больше, чем у числителя, вы получите 0.

Было бы легко проверить это:

std::cout << (2 / ((1000 * (Level * 1250)) / 2)) << std::endl;

Вам нужно деление с плавающей запятой, которое вы можете получить, имея число с плавающей запятой в числителе или знаменателе (или обоих).

3

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector