С точки зрения значащих цифр точность одинакова, независимо от масштаба.То есть, если вы масштабируете свой диапазон от [0.0, 1000.0] до [0.0, 1.0] просто путем деления чисел в естественном диапазоне на 1000.0, это не окажет заметного влияния на точность вашего диапазона.Фактически, больший диапазон будет иметь чуть большую точность, поскольку он полностью содержит меньший диапазон.
Что касается определения абсолютной точности, у вас есть две проблемы:
- Абсолютная точность зависитна величину, которая изменяется «бесконечно» в диапазоне [0, 1] (lim x → 0 log ( x ) = –∞).Так что нет единой точности для чисел в этом диапазоне.Вы можете получить абсолютную точность только в заданной точке диапазона.
- Обычный метод определения минимального шага, известного как ulp, состоит в том, чтобы интерпретировать битовое представление с плавающей точкой как целое число, увеличивая егопо одному, и интерпретировать результат как число с плавающей точкой.Руби, AFAIK, не позволяет вам сделать это.
Однако существует итеративное решение.Просто добавьте 1.0 к числу и вычтите ((x + 1.0) - x
).Если разница равна нулю, удвойте сложение ((x + 2.0) - x
) и повторяйте, пока разница не станет ненулевой.В противном случае вдвое сложите (до 0,5) и повторяйте, пока разница не станет равной нулю.Всякий раз, когда вы останавливаетесь, самое низкое добавление, которое дает ненулевую разницу, является ulp.(Я описал это из расплывчатой памяти, так что это может быть NQR.)