快速整数平方根

时间:2014-05-15 07:41:36

标签: c# square-root

是否有更快或更直接的方法来计算整数平方根:

http://en.wikipedia.org/wiki/Integer_square_root

在C#中作为

private long LongSqrt(long value)
{
    return Convert.ToInt64(Math.Sqrt(value));
}

1 个答案:

答案 0 :(得分:3)

如果您事先知道范围,则可以为平方值及其整数平方根创建查找索引。

以下是一些简单的代码:

// populate the lookup cache
var lookup = new Dictionary<long, long>();
for (int i = 0; i < 20000; i++)
{
    lookup[i * i] = i;
}

// build a sorted index
var index = new List<long>(lookup.Keys);
index.Sort();

// search for a sample 27 
var foundIndex = index.BinarySearch(27);
if (foundIndex < 0)
{
    // if there was no direct hit, lookup the smaller value
    // TODO please check for out of bounds that might happen
    Console.WriteLine(lookup[index[~foundIndex - 1]]);
}
else
{
    Console.WriteLine(lookup[foundIndex]);
}

// yields 5

如果您希望它更高效,您可以通过创建并行的第二个列表来绕过字典查找。