2009-12-31 3 views
0

Просто попробуйте некоторые C по некоторым вопросам эйлера проекта.Почему исключение с плавающей запятой

Мой вопрос: почему я получаю исключение с плавающей запятой во время выполнения следующего кода?

#include <stdio.h> 
main() 
{ 
int sum; 
int counter; 

sum = 0; 
counter = 0; 

for (counter = 0; counter <= 1000; counter++) 
{ 
    if (1000 % counter == 0) 
    { 
     sum = sum + counter; 
    } 
} 

printf("Hello World"); 
printf("The answer should be %d", sum); 
} 

Спасибо,

Майк

+2

Что происходит в первый раз в цикле, когда 'counter' равно 0, и вы делите его, чтобы найти остаток? –

ответ

6

Вы начинаете со счетчиком = 0, а затем сделать "мод" со счетчиком. Это деление на ноль.

Надеюсь, это поможет!

+0

Бинго! Майк, пожалуйста, закройте свой Q. –

+0

Спасибо! Хороший старый мозг. – 2009-12-31 17:27:08

0

Что происходит, когда counter - 0? Вы пытаетесь вычислить 1000 % 0. Вы не можете вычислить ничего по модулю 0, так что вы получите сообщение об ошибке.

Ваш если заявление следует читать:

if (counter % 1000 == 0) 
+0

Единственные значения, для которых счетчик% 1000 равен 0, равны 0 и 1000, поэтому я не уверен, что вторая часть вашего ответа верна? На самом деле, поскольку код, как представляется, определяет и суммирует коэффициенты 1000, я думаю, что для коррекции OP требуется «for (counter = 1;» –

1

1000% 0 является деление на ноль

2

Вы делите 1000 на ноль на первой итерации (вычислительное напоминание о чем-то делится на 0). Почему он разбился с исключением с плавающей запятой ... Я не знаю. Возможно, компилятор перевел его в операцию с плавающей запятой. Может быть, просто причуда реализации.

+0

Я думаю, что сообщение «исключение с плавающей запятой» связано с операционной системой. Когда процессор сталкивается деление на ноль выполняет ловушку для обработчика «деления на ноль». Интересно (и любопытно), этот обработчик в системах Linux отображает сообщение «исключение с плавающей точкой». – 3lectrologos

Смежные вопросы