web-dev-qa-db-ja.com

.NetのInt128?

大きな整数の計算が必要です。 128ビット整数を表し、通常の演算子をすべて実装するクラスまたは構造体はありますか?

ところで、96ビットのintを表すために10進数を使用できることを理解しています。

60
Adam Tegen

これは System.Numericsにあります。 「BigInteger型は、理論上値に上限または下限がない任意の大きな整数を表す不変の型です。」

var i = System.Numerics.BigInteger.Parse("10000000000000000000000000000000");
40
Larsenal

BigIntegerはほとんどのアプリケーションに最適なソリューションですが、パフォーマンスが重要な数値計算がある場合は、完全なInt128およびUInt128私の実装 Dirichlet.Numerics ライブラリ。これらのタイプは、Int64およびUInt64は小さすぎるが、BigIntegerは遅すぎる。

25
Rick Sladkey

いいえ、.NET <= 3.5には何もありません。 BigInteger が.NET 4.0で復帰することを期待/期待しています。 (それは 。NET 3.5からカット でした。)

12
Jon Skeet

J#ライブラリ(デフォルトでVSに含まれているvjslib.dll)への参照を気にしない場合は、.NETにBigIntegerが既に実装されています。

using Java.math;

public static void Main(){
    BigInteger biggy = new BigInteger(....)

}
2
sbeskur

BigIntegerは.NET 4.0のC#およびフレンドの標準部分になりました。参照: Gunnar PeipmanのASP.NETブログ 。特に通常の数学演算子(+、-、/、...)を使用する場合、CPUは通常、単一のCPU命令に直接マップされるため、CPUは通常、より高速かつ一定時間で通常の整数を処理できます。

BigIntegerを使用すると、最も基本的な数学演算であっても、数値のサイズに応じて実行時間が変化するメソッドの関数呼び出しがはるかに遅くなります。これは、BigIntegerが任意精度の演算を実装しているため、かなりのオーバーヘッドが必要になるためです。利点は、BigIntegerが64または128ビットに制限されず、利用可能なシステムメモリ(または約2 ^ 64ビットの精度のいずれか早い方)に制限されることです。 ここ を読んでください。

2
Charles Burns

Int128やInt256などの大きな数の計算用のC#PCLライブラリ。 https://github.com/everbytes/BigMath

1

GUIDは、.NETフレームワークの128ビット整数によってサポートされます。ただし、一般的な整数型のメソッドは付属していません。

私は以前にGUID=を128ビット整数として扱うためのハンドラーを作成しましたが、これは私が8年前に働いていた会社のものでした。ソースコードにアクセスできなくなりました。

したがって、128ビット整数のネイティブサポートが必要で、何らかの理由でBigIntegerに依存したくない場合は、おそらくGUIDをハッキングして目的を達成できます。

1
Brett Allen