Так называемый машинный эпсилон - это просто единица наименьшей точности (ULP) в 1. То есть, это значение позиции младшего значащего бита в представлении 1. Когда в значении есть 53 бита,1 представлена двоичной цифрой 1.000… 000 2 , где после двоичной точки находится 52 нуля.Таким образом, значение позиции самой младшей цифры составляет 2 −52 , а 2 −52 - это ULP, равное 1.
В общем, пусть ULP (x ) обозначает единицу наименьшей точности для x .Обычно формат с плавающей запятой представляет число в виде (−1) s • f • b e , где b - фиксированная база (два для двоичных форматов, десять для десятичного, 16 для шестнадцатеричного), s - знаковый бит (0 для+, 1 для -), e - показатель степени, а f - значение, с p цифрами, где p - фиксированное значениесумма за формат.Для двоичного кода IEEE-754 p равно 53 для 53 бит.ULP - это значение положения наименьшей точности в значениии, масштабируемое показателем степени, поэтому, если некоторое число x представлено в формате с плавающей запятой со знаковым битом s ,Значение f и показатель степени e , его ULP составляет b 1− p • b е .(Я предположил, что формат значения - это одна базовая цифра - b перед точкой радиуса и p -1 цифр после точки радиуса, и поэтому его самая низкая цифра имеетзначение позиции b 1− p . Такие значения находятся в интервале [1, b ).Иногда значения по-разному масштабируются, и показатель степени корректируется для компенсации.Например, в доказательствах может быть полезно, чтобы значения и целые числа были.)
В двоичных форматах ULP (2) = 2 • ULP (1), ULP (½) = ½ • ULP (1)), ULP (¼) = ¼ • ULP (1) и т. Д.
Предположим, что вы вычислили два значения, которые находятся в интервале [1, 2), и это будет, если вычислить с действительным числомарифметические, быть равными, но они были вычислены с арифметикой с плавающей точкой и, как оказалось, немного отличаются.Из-за формата представления они могут отличаться только на кратные ULP (1).Когда вы вычитаете такие числа, вы часто получаете 0, ULP (1), 2 • ULP (1) или другое кратное ULP (1), в зависимости от обстоятельств.Когда два числа, которые были бы идентичны, если их вычислить с помощью арифметики с действительными числами, вычисляются с использованием арифметики с плавающей запятой, они могут испытывать различные ошибки округления в различных частях вычисления.
Если вы вычисляете два значения, которые находятся винтервал [½, 1), они могут отличаться только на кратные ULP (½).
Вот почему вы видите различные кратные или двоичные дроби ULP (1).Это просто артефакт квантования формата с плавающей запятой.