0

decimal.NET ではデータ型が 128 ビットで表されることを知りました。

でビット単位の操作を行うことは可能ですか? decimal2 で操作を行うよりも速く/遅くなりulongますか?

4

1 に答える 1

0

いいえ、できません。まず、128 ビット整数ではなく、decimal基数 10 の浮動小数点型です。浮動小数点型に対してビット単位の演算を行うことはできません

第 2 に、128 ビットのアーキテクチャは存在しないため、C# で 128 ビットの整数型を使用できたulongとしても、128 ビットの値をより小さな値に分割する必要があるため、2 つの変数を操作するよりも決して高速ではありません。レジスターに収まる部分


とはいえ、最新の PC アーキテクチャのほとんどはSIMDをサポートしているため、128 ビット型で高速なビット演算を行うことができます。ネイティブ コードでは非常に簡単ですが、C# でそれができるかどうかはわかりません。そうでない場合は、ネイティブ コード ライブラリを作成し、C# から呼び出す必要があります。

それにもかかわらず、C# には内部で SIMD を使用する可能性のあるBitArray クラスがあるため、128 ビットの BitArray を作成してみてください。

Mono では、名前空間でのSIMD サポートが長い間行われてきました。その後、Microsoft が RyuJit を開発したときに、この目的のために導入されました。に名前が変更されました。Mono.SimdMicrosoft.Bcl.SimdSystem.Numerics

Vector2Vector3Vector4Matrix3x2Matrix4x4Plane、およびQuaternionを含む SIMD 対応のベクトル型。

Monoは公式のSystem.Numerics名前空間もサポートするようになりました。残念ながら、現在、その名前空間の多くの型はビット演算をサポートしていないため、通常の算術演算を使用して回避する必要がある場合があります。しかし、Vector<T>構造体にはBitwiseAnd, BitwiseOr, ExclusiveOr...があります

詳細については、こちらをお読みください

于 2013-08-24T14:30:09.647 に答える