Четверная точность в C ++ (GCC) - PullRequest
12 голосов
/ 27 марта 2011

Совсем недавно, 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 ]

7 голосов
/ 29 марта 2011

Очевидно, это была ошибка установки с моей стороны.

В то время как основная часть GCC на C / C ++ включает libquadmath.so, версия на Фортране содержит 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;
}
4 голосов
/ 29 марта 2011

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

extern "C" { long double fabsq_(long double* x); }
...