Работа с небольшими числами и точностью

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

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

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

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

Мысли?


person Cheetah    schedule 25.01.2011    source источник
comment
Вероятно, нет, но это может повысить производительность, если вы избегаете денормальных исключений, делая это.   -  person Paul R    schedule 26.01.2011


Ответы (2)


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

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

person Michael Borgwardt    schedule 25.01.2011

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

Таким образом, у вас могут возникнуть две проблемы:

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

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

person Bert te Velde    schedule 06.09.2012