Имея дело с небольшими числами и точностью - PullRequest
2 голосов
/ 26 января 2011

У меня есть программа, в которой я имею дело с множеством очень маленьких чисел (ближе к нижнему пределу двойных лимитов).

Во время исполнения моей заявки некоторые из этих чисел постепенно уменьшаются, что означает, что их «оценка» менее точна.

Мое решение на данный момент состоит в том, чтобы увеличить их до того, как я выполню какие-либо вычисления, а затем снова уменьшить их?

... но это заставляет меня задуматься, действительно ли я делаю больше "точности", делая это?

Мысли

Ответы [ 2 ]

0 голосов
/ 06 сентября 2012

Дабл имеет фиксированное количество значащих цифр, а другое фиксированное число байтов для представления "power" -части.

Фактически у вас могут быть две проблемы:

  1. Относительно степенной части: это то, что приближается к пределу маленьких двойных чисел. Увеличение их (степенью 2) помогает избежать того, что ваш номер больше не будет представлен.

  2. когда вы пишете о точности «оценки», я предполагаю, что вы ссылаетесь на количество значащих цифр: это не связано с ограничением на малые числа. Число, которое очень мало, но не слишком мало в смысле нижнего предела для двойников, имеет такое же количество значащих цифр, что и любое «более нормальное» число. Обеспокоенность по поводу числовой точности числа должна, вообще говоря, фокусироваться на том, как вычисляется число, а не на абсолютном размере результата.

0 голосов
/ 26 января 2011

Ваши числа действительно находятся в области между 10 ^ -308 (наименьший нормализованный двойной) и 10 ^ -324 (наименьший представимый двойной, денормализованный, т.е. теряющий точность)? Если это так, то, увеличив их, вы действительно получите точность, работая за пределами диапазона экспонент двойного типа.

Я должен задаться вопросом: какое приложение работает с очень маленькими числами? Я не знаю ни одной физической дисциплины, которая требовала бы чего-либо подобного.

...