Какова фактическая точность длинного двойника на 64-битных платформах Intel? Это 80 бит, дополненный 128 или 128 бит?x86-64 long double precision
Если бывший, помимо перехода gmp, есть ли другой вариант для достижения истинной точности 128?
Какова фактическая точность длинного двойника на 64-битных платформах Intel? Это 80 бит, дополненный 128 или 128 бит?x86-64 long double precision
Если бывший, помимо перехода gmp, есть ли другой вариант для достижения истинной точности 128?
x86-64 точность такая же, как у обычного x86. Extended double - 80 бит, используя ISA x87, с добавлением 6 дополняющих байтов. 128-битного FP-оборудования нет.
Программная реализация четырехмерной или расширенной четырехмерной точности может выиграть от команды умножения x86-64 64x64 => 128 целых чисел.
Существует хорошая вероятность, что это 64 бит для обоих (в зависимости от компилятора и ОС), поскольку компилятор испускает скалярные SSE2 вместо инструкций x87.
x86 не поддерживает более высокую точность, чем 80 бит, но если вам действительно нужно более 64 бит для алгоритма FP, скорее всего, вы должны проверить свои цифры вместо решения проблемы с грубой силой.
Я делаю сравнения между использованием различной точности и точности результата. – Anycorn
Вы когда-нибудь наблюдали такое поведение? GCC, по крайней мере, я не думаю, что может быть запрещено излучать x87. – Potatoswatter
Potatoswatter: Попробуйте '-msse2 -mfpmath = sse', что должно заставить его использовать инструкции SSE для' double' и 'float' s, хотя, вероятно, он по-прежнему использует инструкции x87 для' long double' s. – caf
Я бы порекомендовал использовать MPFR. Это более сложная библиотека с плавающей запятой с множественной точностью, которая построена поверх GMP.
Есть несколько вариантов.
Что касается ints, то арифметика с четностью 128 бит доступна с использованием gcc с использованием типов '__int128_t' и' __uint_128_t'. – rafak
и для fp (gcc> 4.5) есть __float128 с программным эмулированием с плавающей точкой – osgx