Предположим, у нас есть набор данных чисел, с помощью которого мы хотим выполнить некоторые вычисления, используя сложение / вычитание / умножение / деление с использованием компьютера.
Охват действительных чисел представлением с плавающей запятой варьируетсямного, в зависимости от представляемого числа:
С точки зрения абсолютной точности в отображении real-> FP «дыры» растут в сторону больших чисел со странной дырой около 0, в зависимости от архитектуры.Из-за этого точность добавления / смещения к большим числам снизится.
Если мы разделим 2 последовательных числа, которые представлены в нашем представлении с плавающей запятой, результат деления будет больше как при переходе кбольшие числа и при переходе к меньшим и меньшим дробям.
Итак, мой вопрос:
Есть ли "сладкий интервал" для поплавков на обычном ПК сегодня,где результаты арифметики с указанными операторами (add / sub / mul / div) просто более точны?
Если у меня есть набор данных из многозначных чисел, таких как "123123123123123"
, "134534513412351151"
и т. д., с помощью которых я хочу выполнить некоторую арифметику, в какой интервал с плавающей запятой его следует преобразовать, чтобы получить наилучшую точность для результата?
- Так как с плавающей запятой это что-то вроде
1.xxx*10^yyy
, 2.xxx*10^yyy
, ..., 9.xxx*10^yyy
, я бы предположил, что преобразование моих чисел в интервал [1, 9] дало бы наилучшие результаты для используемой памяти, но я могу быть ужасно ошибочнымg ...
Предположим, я использую C, можно ли такое преобразование сделать?Есть ли лучшая практика для этого?Перед операцией C преобразует операнды в тот же формат, поэтому, я думаю, мне нужно использовать строковое представление, вставив «.»где-то и разобрать это как float.
Обратите внимание:
Это теоретический вопрос, у меня нет фактического набора данных на моей руке, который бы решал, чтолучший.На той же ноте упоминание о С было случайным, меня также интересуют ответы типа «забудь С, я бы использовал это и это, ПОТОМУ ЧТО оно поддерживает это и это».
Пожалуйста, избавь меня от таких ответов, как«на это нельзя ответить, потому что это зависит от реальных операций, поскольку результаты могут быть в другом диапазоне величин, чем исходные данные и т. д. и т. д.».Предположим, что результаты вычисления находятся более или менее в том же интервале, что и операнды.Конечно, при делении операндов "более или менее одинаковой величины" результат будет где-то между 1-10, может быть, 0,1-100, ..., но это, вероятно, именно лучший интервал, в котором они могут быть.
Конечно, если ответ включает какое-то объяснение, кроме отмахивания, я буду рад его прочитать!