Когда я компилирую программу:
#include <stdio.h>
int main(void)
{
int x, y = 0;
x = 1 / y;
printf("x = %d\n", x);
return 0;
}
Это дает «Исключение с плавающей запятой (ядро сброшено)»
Однако, когда я компилирую:
#include <stdio.h>
int main(void)
{
double x, y = 0;
x = 1 / y;
printf("x = %f\n", x);
return 0;
}
Он печатает «x = inf»
Почему он возвращает x как бесконечное значение, если вы используете double, но возвращает ошибку, если вы используете int?
inf
илиNaN
. - person tkausl   schedule 02.02.20191 / 0
=>Inf
математически неверно, но числа с плавающей запятой являются неточными значениями, и может случиться так, что в ваших вычислениях делитель был настолько мал, что его округлили до 0, поэтому все же предпочтительнее произвести некоторые результат, чем просто сбой всей программы, чтобы вы знали, где она пошла не так. Именно это и делает IEEE 754 в большинстве случаев. Однако это неразумно делать с целыми числами, а целые числа не могут представлять бесконечность. - person Antti Haapala   schedule 02.02.20191 / 1e-309
, что на несколько порядков меньше, чем математическая бесконечность ;-) - person Antti Haapala   schedule 02.02.2019