Что такое ulps и что такое ulp?

Для решения проблемы сравнения двух близких чисел  был придуман термин ulp.  Аббревиатуру ulp впервые ввел известный ученый в области вычислительной математики  У.Кэхэн [1]. Обозначение ulp (Unit in the Last Place) является английским сокращением «единицы на последнем месте». С тех пор этот термин широко используется в компьютерной литературе, а также применяется в ряде языков программирования. Но, что интересно, единой интерпретации этого термина в настоящее время не существует. В [2] собраны и рассматриваются основные определения термина ulp. В настоящее время существуют разные интерпретации термина ulp. Основные из них даны в работах  У.Кэхэна [1], Д.Харрисона [4] и Д.Голдберг [5].

Но,  при ближайшем рассмотрении определений этого термина, возникают вопросы. И главный из них, ulp это функция или константа? Ниже мы   покажем, что ulp не функция, а единица  измерения.

Начнем с осмысления расшифровки аббревиатуры ulp — единица на последнем месте. Будем рассматривать прежде всего числа с плавающей точкой (ЧПТ):  x=(-1)Se, где S -код знака числа (0 или 1), m — мантисса, состоящая   из значащих цифр, βe — масштабирующий коэффициент, в котором  β -система счисления или база (в англоязычной литературе часто можно встретить термин redix), а e — порядок или экспонента. Коэффициент βe иногда называют характеристикой ЧПТ. Больше информации о ЧПТ можно получить из недавно обновленной статьи  в Wikipedia [3].

 Классический способ найти степень близости двух чисел, это вычислить абсолютную разность Δ этих чисел. Так,  два числа x1 и x2 отличаются друг от друга на величину Δ=|x1x2|. Значение Δ это число бесконечной точности. Если числа x1 и x2 имеют ограниченное количество значащих цифр, то Δ представлено с точностью до младшего знака числа, имеющего наименьшую дробную часть. Например, для x1=0.012 и x2=1.12, следует Δ=|x1-x2|=1,108. Число Δ здесь представлено с точностью до 3-го разряда после точки, также как и x1. Выберем в качестве единицы измерения число 10-3, которое соответствует единице в самом младшем из рассматриваемых разрядов в обоих числа — x1 и x2 и назовем его — «ulp«. Тогда все числа в нашем примере можно выразить в новой единице измерения — ulp. Например, если выбрать ulp=10-3, то для нашего примера  Δ=1108ulp.

Если в качестве единицы измерения выбрать другое значение, например,  ulp=10-2, то наши числа будут отличаться на величину Δ=110.8ulp.

Таким образом,  независимо от вида записи, любое число x может быть представлено в произвольной единице измерения  ulp=βq, как x=α×ulp, где α=x/βq, q — расстояние от точки до разряда, который взят за единицу измерения, q>0, если единица слева от точки и q<0, если единица справа ото точки.

Другими словами, ulp, это условная единица, с которой соотносятся  произвольные числа. Можно привести следующую аналогию. В физике вес измеряется в граммах, килограммах, миллиграммах. Но можно измерять в ulp-ах, или в английской транскрипции в ulps, если за единицу взять 1грамм, 1килограмм, или 1миллиграмм. Тогда, если принять  ulp=1гр., то 1млг.=0.001ulp. Если ulp=1кг., то 1млг.=10^-6ulp. 

Более яркий пример можно привести из химии, где в качестве ulp можно рассматривать единицу атомного веса, равную 1/12 части массы изотопа углерода.

 Давайте посмотрим, какие результаты дает наше определение ulp для  примеров, приведенных  для ulp  в популярной работе  Д.Голдберга [5]. 

Предположим, нам надо округлить число  x=0.0314159 до 4-й цифры числа x,  записанного в естественном виде. Запишем это число в единицах ulp=10-4.  Найдем α =0.0314159/10-4 = 314.159, тогда x=314.159 ulp.  Округленное до 4-й цифры число x будет  X=0.0314. Выразим это число в  ulps. Для этого определим α’ =0.0314/10-4 = 314, тогда X=314ulp. Разница Δ=|x-X|=|α-α’|ulp=|314.159 -314|ulp=0.159ulp. В результате мы получили абсолютную погрешность округления числа х в единицах ulp, совпадающую с величиной из примера Д.Голдберга.

Рассмотрим два числа  x1=3,12 × 10-2 и x2=0,0314=3.14× 10-2. Сравним эти числа с точностью до 2 значащей цифры после точки. Выберем единицу измерения ulp=0.01× 10-2 =10-4. Выразим в  ulps наши числа. Для x1 будем иметь α1 = (3,12 × 10-2)/10-4 = 312, а для x2 будет α2=(3.14× 10-2)/10-4=314. Тогда x1=312ulp, x2=314ulp. Абсолютная разность этих чисел будет |α12|= |312-314|ulp=2ulp, что совпадает с результатом  Д.Голдберга.

Представление округляемого до q-го знака после точки  числа x в единицах ulpq удобно при анализе сценариев округления. Например, любое число x, которое нужно округлить до q-го знака может быть представлено суммой двух чисел — числа x, полученного усечением числа x до q-го разряда и числа τ=x-x’. Т.е. x=x’+τ. Выразим x в ulps. Будем иметь x’=α’ulp и τ=α”ulp, откуда x=(α’ +α”)ulp. Первое слагаемое в скобках — целое число, а второе слагаемое — дробь. Теперь округление числа x до q-го знака можно выполнить по любому известному сценарию, анализируя значение коэффициента α”. В частности, округление до ближайшего целого можно выполнить по следующему сценарию. Если α”<0.5, то x=α’ulp, если α»≥0.5, то x=(α’+1)ulp. Или, если Δ<0.5ulp, то x=α’ulp, если Δ≥0.5ulp, то x=(α’+1)ulp.

 

Литература.

  1. https://people.eecs.berkeley.edu/~wkahan/LOG10HAF.TXT
  2. Handbook of Floating-Point Arithmetic https://doc.lagout.org/science/0_Computer%20Science/3_Theory/Handbook%20of%20Floating%20Point%20Arithmetic.pdf
  3. https://en.wikipedia.org/wiki/Floating-point_arithmetic
  4. https://www.cl.cam.ac.uk/~jrh13/papers/fparith.pdf
  5. https://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html#689

 

Я изобретатель, имею18 авторских свидетельств СССР на изобретения

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *