сложение с плавающей точкой, округление вверх - PullRequest
3 голосов
/ 05 декабря 2011

У меня есть сложение с плавающей запятой, которое, скорее всего, пойдет не так, поскольку значения имеют разную величину, поэтому довольно много значащих цифр смещено (возможно, даже все).В рамках всего расчета точность не так важна, только то, что результат больше или равен результату с произвольной точностью (здесь я отслеживаю конец диапазона и расширяю его на по крайней мере определенное количество).

Поэтому мне понадобится сложение, которое округляется при приближении слагаемых к одному и тому же показателю (т. е. если была установлена ​​одна цифра, сдвинутая из слагаемого, добавлениедолжно происходить с nextval(denormalized_summand, +infinity).

. Есть ли простой способ выполнить это сложение (вручную наименьшее слагаемое меньшего слагаемого и использование nextval на нем, но я сомневаюсь, что это будет эффективно)?

1 Ответ

2 голосов
/ 05 декабря 2011

Вы можете установить режим округления FPU на «вверх», а затем просто добавить нормально.

Вот как это делается в средах GNU:

#include <fenv.h>

fesetround(FE_UPWARD);

Если у вас есть компилятор Microsoft, эквивалентный код:

#include <float.h>

_set_controlfp(_RC_UP, _MCW_RC);
...