2017-01-02 10 views
2
public static BitArray ShLo(BitArray B) 
{ 
    return new BitArray(System.BitConverter.GetBytes(Math.Floor((GetIntFromBitArray(B)/2) % (Math.Pow(2, 64))))); 
} 
private static ulong GetIntFromBitArray(BitArray bitArray) 
{ 
    var array = new int[2]; 
    bitArray.CopyTo(array, 0); 
    return (uint)array[0] + ((ulong)(uint)array[1] << 32); 
} 

この方法には長い時間がかかります。それを最適化することはできますか?この方法で数学演算を最適化するにはどうすればよいですか?

+2

別々のステートメントに分割し、適切なプロファイラを取得して_which_ partが "長い時間"を取るのを見てください。あなたがそれをするまで、あなたはただ推測しているだけです。 –

+2

実際に達成しようとしている方法は何ですか? 'GetIntFromBitArray'が何をしているのかわからないことはありません... –

+0

@JonSkeet更新コード。ここでGetIntFromBitArrayメソッドを取得します。 –

答えて

1

あなたはビット操作にMOD 2^64を変更することにより、優れたスピードをアップ得ることができます:

public static BitArray ShLo(BitArray B) 
{ 
    return new BitArray(BitConverter.GetBytes(Math.Floor((double)((GetIntFromBitArray(B)/2) & Int64.MaxValue)))); 
} 

私はあなたがBigIntegerをしたいように見えるこれは、コメントで言われてきたものをエコーし​​ます任意のサイズの整数に対して数学とビットレベルの演算を行うことができます。

+0

優秀!それは本当に私のコードをスピードアップしています。そして今、最悪の場所 - GetIntFromBitArrayメソッド。 –

+0

私はBitArray Bの長さが64であっても、 – Stuart

+0

ビットが更新されましたか? 'BitArray B = new BitArray (64); ' –

関連する問題