реализация двойной-двойной устойчивости к режиму округления FPU
Пятислойный» являетсяпредставление чисел в виде суммы двух чисел двойной точности без пересечения в значениях. Это представление использует преимущества существующих аппаратных реализаций двойной точности для «почти четверной точности » вычисления.
Одна типичная низкоуровневая функция C в двойной реализации может принимать два числа двойной точностиa
а такжеb
с|a| ≥ |b|
и вычислить двойное число(s, e)
что представляет их сумму:
s = a + b;
e = b - (s - a);
(Адаптированы изЭта статья.)
Эти реализации обычно предполагают режим округления до ближайшего четного.
В приведенном выше вычислении(s, e)
является нормализованным двойным двойным только из-за этого предположения. Без этого, с,a == 0x1.0p60
b == 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 в режиме округления до ближайшего четного. Самый простой способ, которым я вижу быстрые, правильно округленные элементарные функции, которые работают в любом режиме округления, был бы, если бы можно было как-то полагаться на арифметику типа двойной двойности, которая работала в любом режиме округления.