Я работаю над некоторым инструментом, который вычисляет числа, которые могут приблизиться к 1e-25
в худших случаях и сравнивать их вместе, на Java. Я, очевидно, использую двойную точность.
Я прочитал в еще один ответ, который я не должен ожидать больше, чем 1e-15
до 1e-17
, и этот другой вопрос касается повышения точности при упорядочивании операций в "лучшем" порядке.
Какие операции с двойной точностью более склонны к снижению точности на этом пути? Должен ли я попытаться работать с номером как можно большим или малым? Делать деления сначала перед умножением?
Я бы предпочел не использовать классы BigDecimal
или эквивалент, так как код уже достаточно медленный;) (если только они не Конечно, скорость удара слишком велика).
Любая информация будет принята с благодарностью!
EDIT. Тот факт, что числа являются "маленькими" по абсолютной величине (1е-25), не имеет значения, так как двойной может спуститься до 1е-324. Но важно то, что, когда они очень похожи (оба в 1е-25), мне приходится сравнивать, скажем, 4.64563824048517606458e-21 - 4.64563824048517606472e-21 (разница 19 и 20 цифр). Когда вычисляет эти числа, разница настолько мала, что я могу ударить по "ошибке округления", где остаток заполняется случайными числами.
Возникает вопрос: "как упорядочить вычисления так, чтобы эта потеря точности была минимизирована?". Это может быть деление перед умножением или добавлением в первую очередь.