如何在此方法中优化数学运算?

时间:2017-01-02 18:41:57

标签: c# .net optimization

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);
}

这种方法需要很长时间。我能优化吗?

1 个答案:

答案 0 :(得分:1)

通过将mod 2 ^ 64更改为位和操作,您可以获得良好的加速:

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

我会回应评论中所说的内容,看起来你想要BigInteger,这将允许你对任意大小的整数进行数学和位级操作。