0

次のようなコードのスニペットがあるとします。

typedef double My_fp_t;

My_fp_t my_fun( My_fp_t input )
{
// some fp computation, it uses operator+, operator- and so on for type My_fp_t
}

My_fp_t input = 0.;
My_fp_t output = my_fun( input );

既存のコードを浮動小数点の任意精度のC++ライブラリに後付けすることは可能ですか?

単純に追加#include <cpp_arbitrary_precision_fp>し、に変更して、C++の演算子オーバーロードにその仕事をさせtypedef double My_fp_t;たいと思います...typedef arbitrary_double_t My_fp_t;

私の主な問題は、実際には私のコードにtypedef:-(がないことです。そのため、私の計画は失敗する運命にあるのかもしれません。

私のコードにtypedefがあると仮定すると、他にどのような問題に直面しますか?

4

2 に答える 2

2

これは大変かもしれません。私は、博士論文のコードでテンプレート アプローチを使用して、さまざまな数値型を処理しました。私が遭遇した問題を確認するために、それを見てみたいと思うかもしれません。

問題は、数値で行うことが標準の算術演算子を使用することだけであれば問題ありません。ただし、平方根またはその他の非演算子関数を使用するとすぐに、ヘルパー オブジェクトを作成してオブジェクトの型を検出する必要があります (実行時にこれを行うには遅すぎるため、コンパイル時に行います。ヘルプについては、boost メタプログラミング ライブラリを参照してください)。その上で)、正しい関数を呼び出して、正しい型として返します。それはすべて完全に実行可能ですが、思ったよりも時間がかかり、コードがかなり複雑になります。

私の経験では (C++ で利用可能な最速の任意精度ライブラリである GMP を使用していました)、導入したすべての労力と複雑さの後で、GMP は自分が行っている種類の計算には遅すぎることがわかりました。学術的には興味深いものでしたが、実際には役に立ちませんでした。これを開始する前に、速度テストを行って、任意精度の演算を使用した場合でもライブラリが使用可能かどうかを確認してください。

于 2011-05-19T13:24:24.073 に答える
1

ライブラリが、使用する演算子を正しくオーバーロードする型を定義している場合、問題はありません...

于 2011-05-19T13:10:03.087 に答える