Итак, до 10000 единиц будет добавлено значение 1/10000 10000 раз. Логически это дает 10001. Однако из-за размытия это не происходит, что связано с ограничениями хранения. Результат 10000.999999992928. Я нахожусь там, где происходит размывание, который находится во втором дополнения:Арифметика машины и смазывание: добавление большого небольшого числа
1: 10000.0001
2: 10000.000199999999
3: 10000.000299999998
4: 10000.000399999997
etc...
Однако, захватывая, почему произошло размытие, где борьба лежит. Я написал код для создания плавающей точки двоичных чисел, чтобы увидеть, произошли ли здесь размазывании
So 10000 = 10011100010000 or 1.001110001*10**13 while
0.0001= 0.00000000000001101001 or
1.1010001101101110001011101011000111000100001100101101*2**(-14)
then 10000.0001 = 10011100010000.00000000000001101001
Теперь размазывание происходит в следующем добавлении. Это имеет отношение к размеру мантиссы? Почему это происходит только на этом этапе? Просто интересно знать. Сначала я собираюсь добавить все 1/10000, а затем добавить его в 10000, чтобы избежать smaering.
Возможно, вам лучше найти хорошее общее руководство по представлениям с плавающей точкой. Я бы рекомендовал [* Что каждый компьютерный ученый должен знать о арифметике с плавающей точкой] Дэвида Голдберга] (https://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html), или, для более мягкой езды, [* Плавучий путеводитель * Веб-сайт] (http://floating-point-gui.de/). –