Четвёртая точность в С++ (GCC)
Совсем недавно GCC 4.6.0 вышел вместе с libquadmath. К сожалению, GNU поддерживает Fortran, но не C или С++ (все, что включено, является .so). Я не нашел способ использовать эти новые функции на С++, однако GNU C поддерживает тип __float128
для гарантированных поплавков с четными точками. GNU C, похоже, не поддерживает математические функции в libquadmath, такое fabsq
(абсолютное значение, q
является суффиксом для quad).
Есть ли способ получить эти функции, работающие на С++, или есть ли альтернативная библиотека, которую я мог бы использовать для математических функций с помощью __float128
? Каков наилучший метод получения поплавков с четырьмя точками, работающих в GCC? Прямо сейчас я могу добавлять, вычитать и умножать их, но это бесполезно для меня, учитывая, как я не могу преобразовать их в строки или использовать такие функции, как truncq
и fabsq
, чтобы создать свою собственную строковую функцию.
Ответы
Ответ 1
По-видимому, это, похоже, было ошибкой установки с моей стороны.
В то время как основная часть C/С++ GCC включает libquadmath.so, версия Fortran предоставляет libquadmath.a и quadmath.h, которые могут быть включены для доступа к функциям.
#include <quadmath.h>
#include <iostream>
int main()
{
char* y = new char[1000];
quadmath_snprintf(y, 1000, "%Qf", 1.0q);
std::cout << y << std::endl;
return 0;
}
Ответ 2
nm.so файл и посмотреть, какие имена функций действительно есть. IIRC, fortran-процедуры имеют _ в конце имени. В С++ вам понадобятся внешние прототипы "C" {}. Если это интерфейс fortran, то все args передаются по ссылке, поэтому proto может быть чем-то вроде
extern "C" { long double fabsq_(long double* x); }