1

Linux で double、long double、または quadruple 精度で実行できる多次元数値積分コードを作成しました。すべてのモードは問題なくコンパイルおよび動作しますが、Mac で 4 倍精度の場合に同じコードをコンパイルしようとすると、意味がわからないエラーが発生します。

私は g++ でコンパイルしていますが、他のコンパイラも試しました (clang が何をするかを確認するためだけに試しましたが、私の知る限りでは 4 倍精度をサポートできませんか? 間違っていたら訂正してください)。

関連するライブラリとヘッダー (quadmath.h ヘッダーを含む) をリンクすると、quadmath.h から次のエラーが発生します。

Unsupported machine mode 'TC'
typedef _Complex float __attribute__((mode(TC))) __complex128
error unknown type name '__float128'

__float128 エラーは、acosq、asinq などのさまざまな数学演算でも再表示されます...

サポートされていないマシン モード エラーに遭遇したことはありません。GNU コンパイラに関する注意事項GNU コンパイラに関する注意事項およびGNU 浮動小数点型を見てきました。

人々がコンパイルしてテストするための最小限の作業例を作成することは難しいため、エラーを追跡して何が問題なのかを突き止めようとしていますが、この段階で何をすべきかわかりません. これらのエラー メッセージが表示された場合、次のステップは何でしょうか? Linux と Mac の違いについて、私が見逃していることはありますか? 私は常に Linux でコードを書いてきたので、後者には慣れていません。また、Mac での 4 倍精度計算へのアプローチ方法は、慣れ親しんだ方法とは異なるようです。

ご協力ありがとうございました

-イエティ

4

1 に答える 1

0

異なるアーキテクチャ (CPU タイプ / オペレーティング システム) が常に同じ浮動小数点タイプをサポートするとは限りません。質問のエラー メッセージから判断すると、「__float128」は、コードをコンパイルしようとしている Mac ではサポートされていません。

これを修正するには、私が検討する2つの異なる方法があります。最も簡単な方法は、コードにプリプロセッサ ディレクティブを追加して、コードの特定の部分のみがコンパイルされるようにすることです。つまり、浮動小数点型がターゲット アーキテクチャでサポートされているものです。残念ながら、これはプログラムの Mac バージョンが 4 倍精度を使用できないことを意味します。

難しい解決策は、4 倍精度の浮動小数点型を自分で実装するか、既に実装されているライブラリを見つけることです。これらのカスタム型は、ネイティブにサポートされている型ほど高速ではないと思いますが、少なくとも必要な精度を得ることができます。

于 2016-12-21T12:58:25.053 に答える