13

つい最近、GCC 4.6.0 がlibquadmathとともにリリースされました。残念ながら、GNU は Fortran をサポートしていますが、C や C++ はサポートしていません (含まれているのは .so だけです)。私はこれらの新機能を C++ で使用する方法を見つけていませんが、GNU C は__float128保証された 4 倍精度浮動小数点数の型をサポートしています。GNU C は、 libquadmathなど の数学関数をサポートしていないようですfabsq(絶対値、qquad の接尾辞)。

これらの関数を C++ で動作させる方法はありますか、または数学関数に使用できる代替ライブラリはあり__float128ますか? GCC で動作する 4 倍精度浮動小数点数を取得するための最良の方法は何ですか? 現在、それらを加算、減算、および乗算できますが、それらを文字列に変換したり、truncqおよびなどの関数fabsqを使用して独自の文字列関数を作成したりする方法がないことを考えると、これは役に立ちません。

4

2 に答える 2

8

どうやら、これは私の側のインストールエラーだったようです。

GCC のコア C/C++ 部分には 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;
}
于 2011-03-29T02:04:15.633 に答える
4

nm で .so ファイルを開き、実際の関数名を確認します。IIRC、fortran ルーチンには、名前の末尾に _ があります。C++ では、extern "C" {} プロトタイプが必要になります。これが fortran インターフェースの場合、すべての引数は参照によって渡されるため、proto は次のようになります。

extern "C" { long double fabsq_(long double* x); }
于 2011-03-29T01:18:06.627 に答える