Задать вопрос
@ber_enot
Веб-разработчик, Vue.js / Node.js

Почему при сложении 1500 чисел, не превышающих 1, printf выдает #INF0?

ЯП - Си.
Написал такой цикл:
int i,n;
   double t_i,rnd,sum;
sum=0.0;
n=1500;
   for (i=0;i<n;i++){
        rnd = (rand()%1001)/1000.0; // от 0 до 1
        t_i = (-1.0)*log(rnd)/5.333; // не превышает единицы
        sum=t_i+sum;
        printf("rnd: %.5f, log(rnd): %.5f, t_i: %.5f, sum: %.5f\n\n",rnd,log(rnd),t_i,sum);
   }

Переменная sum по непонятным мне причинам выдает 1.#INF0.
Переменная t_i по определению не может быть больше единицы или меньше нуля, следовательно, максимальное значение sum=1500, минимальное - 0. Тогда почему?

Вот кусок результата вывода:
rnd: 0.56000, log(rnd): -0.57982, t_i: 0.10872, sum: 1.#INF0

rnd: 0.42200, log(rnd): -0.86275, t_i: 0.16178, sum: 1.#INF0

rnd: 0.17900, log(rnd): -1.72037, t_i: 0.32259, sum: 1.#INF0

rnd: 0.28600, log(rnd): -1.25176, t_i: 0.23472, sum: 1.#INF0

rnd: 0.02500, log(rnd): -3.68888, t_i: 0.69171, sum: 1.#INF0

rnd: 0.13000, log(rnd): -2.04022, t_i: 0.38257, sum: 1.#INF0

rnd: 0.74900, log(rnd): -0.28902, t_i: 0.05419, sum: 1.#INF0

rnd: 0.30100, log(rnd): -1.20065, t_i: 0.22514, sum: 1.#INF0
  • Вопрос задан
  • 478 просмотров
Подписаться 1 Оценить Комментировать
Решения вопроса 1
Schullz
@Schullz
=^.^=
На некоторой итерации случается следующее:
rnd = 0;
t_i = 1.#INF0
sum=1.#INF0

Это из-за того, что log(0) стремится к минус бесконечности
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы