какова лучшая числовая точность в рубине - PullRequest
1 голос
/ 13 декабря 2010

Мне было интересно, как я могу получить лучшую точность на рубине.Кто-то сказал мне, что наилучшая точность, вероятно, находится в диапазоне от 0 до 1, потому что, когда вы увеличиваете число, шаг также увеличивается.и какой следующий номер с плавающей точкой, то точность будет разница, верно?Если я прав, как я могу сделать это на ruby?

Я не уверен, как использовать это http://ruby.wikia.com/wiki/Float, чтобы найти эту информацию.

Любая помощь приветствуется.

Ответы [ 3 ]

3 голосов
/ 13 декабря 2010

С точки зрения значащих цифр точность одинакова, независимо от масштаба.То есть, если вы масштабируете свой диапазон от [0.0, 1000.0] до [0.0, 1.0] просто путем деления чисел в естественном диапазоне на 1000.0, это не окажет заметного влияния на точность вашего диапазона.Фактически, больший диапазон будет иметь чуть большую точность, поскольку он полностью содержит меньший диапазон.

Что касается определения абсолютной точности, у вас есть две проблемы:

  1. Абсолютная точность зависитна величину, которая изменяется «бесконечно» в диапазоне [0, 1] (lim x → 0 log ( x ) = –∞).Так что нет единой точности для чисел в этом диапазоне.Вы можете получить абсолютную точность только в заданной точке диапазона.
  2. Обычный метод определения минимального шага, известного как ulp, состоит в том, чтобы интерпретировать битовое представление с плавающей точкой как целое число, увеличивая егопо одному, и интерпретировать результат как число с плавающей точкой.Руби, AFAIK, не позволяет вам сделать это.

Однако существует итеративное решение.Просто добавьте 1.0 к числу и вычтите ((x + 1.0) - x).Если разница равна нулю, удвойте сложение ((x + 2.0) - x) и повторяйте, пока разница не станет ненулевой.В противном случае вдвое сложите (до 0,5) и повторяйте, пока разница не станет равной нулю.Всякий раз, когда вы останавливаетесь, самое низкое добавление, которое дает ненулевую разницу, является ulp.(Я описал это из расплывчатой ​​памяти, так что это может быть NQR.)

1 голос
/ 13 декабря 2010

Библиотека Flt ruby ​​обеспечивает произвольную точность с плавающей запятой.

1 голос
/ 13 декабря 2010

Вы можете использовать класс Rational - он хранит нецелые числа в виде доли от двух Integer с, которые (насколько я знаю) будут автоматически преобразованы в Bignum, когда необходимо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...