私の基本的な目的は、同等の float であると思われる 2 つを減算することでした。このことを考慮:-
float x=1;
float a=x/30-x/40;
float b=x/30;
b-=x/40;
std::cout<<a-b<<std::endl;
ゼロにするべきだった。しかし、私はしませんでした。代わりに、約 10^(-10) という非常に小さな数値が得られました。
さて、2つのオプションがありました:-
まず、分数の代わりに有理式を使用し (つまり、分子と分母を扱う)、最終的な有理式を分数に変換することを考えました。Boost.rational を介してこれを行いました。分子と分母が巨大になる可能性があるため、cpp_int を使用して分子と分母を格納しました。それは正常に動作します。しかし、問題は、私が作成しているプログラムが非常に時間がかかっていることです。これは、巨大な整数を扱わなければならないためだと思います。
次に、固定小数点演算を試すように勧められました。私はそれがあまり得意ではありません。それで、固定小数点演算でも正しい答えが得られるかどうかわかりませんか?私が考えていたのはこれでした->減算の結果を50番目の精度まで正しくしたいとします。そこで、適切な 10 の累乗を掛けて、小数点の左側に 50 桁を取得します。小数部分を削除して、cpp_int に変換します。私は両方のフロートでこれを行います。そして、これらの cpp_int で減算を実行します。2 つの問題:- まず、cpp_float_dec_50 を cpp_int に変換できません。Boost では、この種の (損失の多い) 変換を直接行うことはできません。第二に、このアプローチが機能することにまったく自信がありません。
それでは、最後に 2 つの質問: - cpp_float_dec_50 を cpp_int に変換する方法は? 質問でこれまでに提示されたコンテキストで、2つのフロートを2つ減算するのに最適なアプローチはどのようなものですか?
ありがとう。そして、これのいずれかが非常に初心者または愚かな質問に出くわした場合は申し訳ありません. まだ勉強してる。