Нецелая ошибка ULP? - PullRequest
       28

Нецелая ошибка ULP?

1 голос
/ 24 марта 2012

У меня вопрос о точности с плавающей запятой. Насколько я понимаю, ULP - это расстояние между двумя последовательными дискретными конечными числами в данной спецификации. Или подразделение в наименее значимом месте, как следует из названия. В любом случае, я видел это в спецификации Java для sinh в java.lang.Math:

"Расчетный результат должен быть в пределах 2,5 ульпс точного результата."

Я не понимаю, как вы можете получить ошибку ULP, которая не является целым числом. Если у вас 2,5 ULP, не значит ли это, что есть место менее значимое, чем наименее значимое? Что значит иметь ошибку 2,5 ULP?

Ответы [ 3 ]

7 голосов
/ 24 марта 2012

Рассмотрим расчет 3/2. Точный результат 1,5. В целочисленной арифметике результат равен 1. Это ошибка 0,5, то есть половина ULP.

Аналогичные рассуждения могут быть применены к арифметике с плавающей точкой.

0 голосов
/ 24 марта 2012

Вы не можете измерить ошибку с дробными ULP в той же системе нумерации, к которой применяется ULP.Но вы можете, например, если вы вычисляете значение float, но используете double для промежуточных вычислений.В этом случае двойное значение будет (более) точным значением, а число с плавающей точкой будет округленным значением.Разница между ними будет меньше, чем ULP для чисел с плавающей запятой.

Это относится к Math.sinh(), потому что это часть API основного языка, и поэтому Javadoc служит спецификацией, которой должны придерживаться все совместимые реализациик.Реализация JDK Oracle делегирует вычисления нативному методу.По сути, Javadoc говорит: «Вы можете свободно внедрять этот метод, однако выбираете, если можете гарантировать, что он всегда возвращает достаточно хорошее значение».

0 голосов
/ 24 марта 2012

Нет, поскольку вы сравниваете точное значение с вычисленным.

Если ваш ULP равен 1, а результат равен 0,5, ваша ошибка будет 0,5 ULP.

...