реализация двойной-двойной устойчивости к режиму округления FPU

Контекст: двойная двойная арифметика

Пятислойный» являетсяпредставление чисел в виде суммы двух чисел двойной точности без пересечения в значениях. Это представление использует преимущества существующих аппаратных реализаций двойной точности для «почти четверной точности » вычисления.

Одна типичная низкоуровневая функция C в двойной реализации может принимать два числа двойной точностиa а такжеb с|a| ≥ |b| и вычислить двойное число(s, e) что представляет их сумму:

s = a + b;
e = b - (s - a);

(Адаптированы изЭта статья.)

Эти реализации обычно предполагают режим округления до ближайшего четного.

В приведенном выше вычислении(s, e) является нормализованным двойным двойным только из-за этого предположения. Без этого, с,a == 0x1.0p60b == 1в режиме округления вверх,s рассчитывается как0x1.0000000000001p60 а такжеe немного выше-0x0.0000000000001p60, Их сумма равна математической суммеa а такжеb но их значения перекрываются.

приниматьa == 0x1.0p120 и математические суммыa а такжеb с одной стороны иs а такжеe с другой стороны, даже не совпадают больше.

Вопрос

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

Такая библиотека уже существует?

Более общий контекст: правильно округленные элементарные функции

Реализации типа double-double sort используются для промежуточных вычислений при реализации библиотек правильно округленных элементарных функций. В результате библиотеки, реализованные таким образом, имеют тенденциювпечатляющий сбой при вызове функции, когда FPU не находится в режиме округления до ближайшего четного, Изменение режима округления внутри функции не очень приемлемо по соображениям производительности и потому, что сигнал, поступающий во время выполнения функции, оставит FPU в режиме округления до ближайшего четного. Самый простой способ, которым я вижу быстрые, правильно округленные элементарные функции, которые работают в любом режиме округления, был бы, если бы можно было как-то полагаться на арифметику типа двойной двойности, которая работала в любом режиме округления.

Ответы на вопрос(1)

Ваш ответ на вопрос