4

非常に大きな数だけでなく、分数のサポートも処理できる ac# 番号が必要です。.NET 4.0 で登場する System.Numerics.BigInteger を見ましたが、分数で動作させることができません。

something i = 2;
something j = 5;
something k = i/j; //should be 0.4

私が試したとき

 BigInteger i = 2;
 BigInteger j = 5;
 double d = (double)(i/j); //d is 0.0

そのようなライブラリを知っている人はいますか?

4

9 に答える 9

10

F# PowerPackには数値型が含まれていますBigRational。これは F# で実装され、F# 用に設計されていますが、この型は C# からも完全に使用できるはずです (オーバーロードされた演算子などを含む)。PowerPack は追加の F# 機能を備えた追加ライブラリであるため、.NET フレームワークの一部ではありませんが、Microsoft がサポートする製品です。

このBigRational型はすべての基本的な演算子 ( +, /, -, *, >, <, >=, <=, ==, !=) をサポートしており、自動的に通常の形式の数値が維持されると思います。数値を 2 つの値として表した場合、 1/2が2/4に等しくBigIntegerなるように比較を実装する必要があります。

于 2010-03-28T18:39:05.227 に答える
2

http://www.extremeoptimization.com/Documentation/Mathematics/Arbitrary_Precision_Arithmetic/Arbitrary_Precision_Rationals.aspxをご覧ください。

多分あなたはこれをしたいだけですが:double d = ((double)i) / ((double)j);

于 2010-03-28T18:19:04.190 に答える
1

私はかつてこのライブラリを使用していました: W3b.Sine。これは:

C# で開発された任意精度の 10 進数ライブラリ。

http://www.fractal-landscapes.co.uk/bigint.htmlを試すこともできます。しかし、私はそれを使用した経験がありません。

于 2010-03-28T18:23:08.600 に答える
1

Decimalクラスが十分に大きいかどうかを検討してください。

Decimal 値型は、正の 79,228,162,514,264,337,593,543,950,335 から負の 79,228,162,514,264,337,593,543,950,335 までの範囲の 10 進数を表します。Decimal 値タイプは、多数の有効な整数桁と小数桁を必要とし、丸め誤差がない財務計算に適しています。

本当に大きくしたい場合は、GMPなどの「bignum」ライブラリを探します (バインディングについては google を参照してください)。

于 2010-03-28T18:24:58.963 に答える
0

これにより、2 つの BigInteger の有理数を double に変換する適切な近似値が得られるはずです。

struct BigRational
{
    BigInteger numerator;
    BigInteger denominator;

    public double ToDouble()
    {
        BigInteger quotient;
        BigInteger remainder;

        quotient = BigInteger.DivRem(numerator, denominator, out remainder);

        return (double)quotient + (double)remainder / (double)denominator;
    }
}
于 2010-03-28T18:23:58.380 に答える
-1

「非常に大きな数」の範囲は?

System.Double.MaxValue = 1.7976931348623157E+308、これは私にとってかなり大きな数のようですが( MSDN Double.MaxValue )

于 2010-03-28T18:59:56.120 に答える
-1

BigInteger は、スズに書かれていることだけをサポートしています - 整数で、分数はそうではありません。

このdoubleデータ型は、±5.0 × 10 −324から ±1.7 × 10 308までの 2 進浮動小数点数をdecimalサポートし、±1.0 × 10 −28から ±7.9 × 10 28までの 10 進浮動小数点数をサポートします。Gabe の回答では、分数をモデル化するために使用できるクラスについて言及していますが、範囲が十分な場合はプリミティブ データ型を使用してください。

于 2010-03-28T18:19:16.740 に答える
-2

i/j は何かを意味しますか? それらはクラスのインスタンスです。 BigInteger.Divide(i, j) を使用する必要があります

整数で動作するように設計されていますが、残りは破棄されると想像する必要があります。関数呼び出しなしで直接除算をサポートしている場合、これが 0 になる理由です。

于 2010-03-28T18:25:05.033 に答える