У меня есть программа C99 среднего размера, которая использует метод long double
(80 бит) для вычисления с плавающей запятой. Я хочу улучшить точность с помощью нового расширения GCC 4.6 __float128
. Как я понял, это математическая математика с 128-битной точностью.
Как мне преобразовать мою программу из классического длинного двойного 80-битного в четырехъядерные поплавки 128 бит с программной эмуляцией полной точности? Что мне нужно изменить? Флаги компилятора, источники?
Моя программа считывает значения полной точности с помощью strtod
, выполняя на них много разных операций (например, + - */sin, cos, exp и другие из <math.h>
) и printf
.
PS: несмотря на то, что float128 объявлен только для Fortran (REAL * 16), libquadmath написан на C, и он использует float128. Я не уверен, что GCC конвертирует операции с float128 в библиотеку времени выполнения или нет, и я не уверен, как переносить из long double в __float128 в моих источниках.
PPS: есть документация по режиму gcc в режиме "C": http://gcc.gnu.org/onlinedocs/gcc/Floating-Types.html
"Компилятор GNU C поддерживает... плавающие типы 128 бит (TFmode). Поддержка дополнительных типов включает в себя арифметические операторы: добавлять, вычитать, умножать, делить, унарные арифметические операторы, реляционные операторы; операторы равенства... Типы __float128 поддерживаются на i386, x86_64"