2014-01-16 3 views
-3

По какой причине простой тест программы генерирующего деление на ноль ошибок, даже хотя деление на ноль невозможно, насколько я могу сказать:Деление на ноль Ошибка в простой программе

#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

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

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

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

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

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

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

+0

Спасибо за ваш ответ. Это помогло мне в этом, но также оно выявило серьезную проблему с моим вычислением exp, где я был целой десятичной точкой для числителя упрощенного уравнения. – Geowil

3

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

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

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

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

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

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

+0

Вы правы. В программе это происходит из того, что у меня был EXPTNL как двойной, а не int, поэтому, хотя программа скомпилирована без предупреждения, она создает ошибочные данные, которые я еще не видел, поскольку я не связывал главную функцию с любым из вещи из этого класса для тестирования: o Три птицы с одним камнем. – Geowil