Когда l oop остановится? - PullRequest
0 голосов
/ 08 апреля 2020

, так что это код, который увеличивает значение x на 1, пока условие выполняется. Вопросы, когда этот l oop остановится?

#include <stdio.h>
int main(void)
{
    double x=1;
    while(x+1>x)
    {
        x++;
        printf("%f\n",x);
    }
    return 0;
}

Ответы [ 2 ]

1 голос
/ 08 апреля 2020

Он остановится, когда x станет настолько большим, что точность с плавающей запятой не сможет вместить все цифры. В этот момент добавление 1 не меняет значение, поэтому x + 1 == x и l oop останавливается.

0 голосов
/ 08 апреля 2020

Предположим, что double имел 2 бита (и неявный 1-й бит) для мантиссы, и нас не волнует показатель (или сигнал)

1 == [1]00+0
2 == [1]00+1
3 == [1]10+1
4 == [1]00+2
5 == [1]01+2
6 == [1]10+2
7 == [1]11+2
8 == [1]00+3
9 == <cannot represent>
10 == [1]01+3

Теперь предположим, что арифметика c выполняется с 3 битами

[1]000+3 + [1]000+0 ----- 8 + 1
[1]001+3            ----- 9

последнее значение (9) усекается до 8, когда возвращается к 2-битной мантиссе.

...