Четверная точность в C++ (GCC)

Совсем недавно, GCC 4.6.0 вышел вместе с libquadmath. К сожалению, GNU поддерживает Fortran, но не C или C++ (все, что включено, -.so). Я не нашел способа использовать эти новые функции в C++, однако, GNU C поддерживает __float128 тип для гарантированных поплавков четверной точности. GNU C, похоже, не поддерживает математические функции в libquadmath, такие как fabsq (абсолютная величина, q будучи суффиксом для четырехугольника).

Есть ли способ заставить эти функции работать в C++, или есть какая-то альтернативная библиотека, которую я мог бы использовать для математических функций с __float128? Каков наилучший метод получения поплавков четверной точности, работающих в GCC? Прямо сейчас я могу сложить, вычесть и умножить их, но это бесполезно для меня, учитывая, что у меня нет возможности преобразовать их в строки или использовать такие функции, как truncq а также fabsq создать свою собственную строковую функцию.

2 ответа

Решение

Видимо, это, похоже, ошибка установки с моей стороны.

В то время как основная часть C/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;
}

nm.so файл, и посмотрите, какие имена функций на самом деле. IIRC, фортранские процедуры имеют _ в конце имени. В C++ вам нужно будет использовать прототипы "C" {}. Если это интерфейс Fortran, то все аргументы передаются по ссылке, поэтому прото может быть что-то вроде

extern "C" { long double fabsq_(long double* x); }
Другие вопросы по тегам