2017-01-14 23 views
0

Я пишу более длинную программу на C, и когда я пытаюсь запустить ее, я получаю floating point exception error : 8. Это всего лишь фрагмент кода, из-за которого я получаю сообщение об ошибке в моей основной программе. Почему я получаю сообщение об ошибке, когда a = (1/i+1)?Плохая арифметика в c

int main() 
{ 
    double a; 
    for(int i = 0; i < 10; i++) 
    { 
     a = 1/i+1; 
     printf("a = %lf",a); 

    } 
} 
+3

мультипликативные операторы имеют более высокий приоритет, чем аддитивные операторы. – EOF

+3

Там используются времена, когда программирование называлось «прикладной математикой» ... * sigh * – alk

+1

'ошибка ожидания с плавающей запятой'. Какие? – DeiDei

ответ

1

Начальное значение i в этом выражении 0:

a = 1/i + 1; 

Поскольку i имеет int тип, вы оценке целочисленное деление на ноль, которая вызывает неопределенное поведение.

Это несколько вводит в заблуждение, что приводит к сообщению floating point exception error : 8, но прекрасно совместимо с понятием неопределенного поведения.

Обратите внимание, что вам нужно изменить выражение, чтобы заставить оценку с плавающей точкой:

#include <stdio.h> 

int main(void) { 
    for (int i = 0; i < 10; i++) { 
     double a = 1.0/i + 1; 
     printf("a = %f\n", a); 
    } 
    return 0; 
} 
+0

Спасибо за ваш ответ. Первый ответ, когда i = 0 - «inf». Результаты цикла должны храниться в статическом массиве, поэтому, когда я хочу получить сумму массива, я также получаю «inf». –

+0

@BartlomiejMlynarkiewicz: Просто не делите на ноль. – alk

+0

Я пришел к этому решению, к счастью, его справедливые практические вопросы для теста Im, и ответ будет написан на бумаге, поэтому я не слишком уверен, что если бы вычитал отметку для инициализации цикла с 1 вместо 0. –