Подтвердить что ты не робот

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

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

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

4b9b3361

Ответ 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); }