1

RatNum 式を Dot Net Decimal に変換したいと思います。RatNum には ToDecimalString メソッドがありますが、ToDecimal メソッドはありません。これには何か理由がありますか?RatNum を Decimal.Parse(ratnum.ToDecimalString(2)) 以外の 10 進数に変換する方法はありますか? ありがとう。

4

1 に答える 1

5

この質問に対する簡単な答えは、System.Decimal 型は (非 IEEE 754) 浮動小数点形式であるのに対し、Z3 の RatNum は有理数の無限精度形式であるということです。これが必要なのは、有理数の 10 進展開が必ずしも有限であるとは限らないためです (たとえば、1/3 の場合)。

精度 p を取り、最大 p 桁の有理数の 10 進文字列表現を生成する ToStringDecimal を使用できます。これは、Int64 または Single/Double/Decimal に収まるよりも多くの桁になる可能性があることに注意してください。

あるいは、「1/3」などの正確な表現を生成する ToString を使用することもできます。

有理数の分子と分母を取得する関数もあり、これらを使用して他の形式で小数を生成できます。

したがって、長い答えは次のとおりです。Z3は無限に正確であり、解を近似する必要がある場合、これはZ3の外部で、文字列との間の変換の提案された方法によって、または他の変換を介して行う必要があります。

x.Numerator.Int / x.Denominator.Int

これらの整数が int 型の最大値を超えないことがわかっている場合、およびアプリケーションが結果の浮動小数点近似に悩まされていない場合。

于 2013-05-24T21:29:46.487 に答える