是否有算法使用按位运算查找给定数字的平方根?
答案 0 :(得分:13)
有this famous piece of code magic计算逆平方根,有一些非常聪明的位。它错误地归因于约翰卡马克 - here's a deeper dig的起源。也许这就是你要问的问题?
但是,我不建议使用它。在现代CPU上,它无法击败专门的超越指令。你通常的c ++内在sqrt()
可能会击败它。
[编辑:]所引用的文章描述了这种快速近似的一般推导方法,并明确说明'在sqrt(x)'中导出类似的方法作为其最后一行的作业问题。因此,您应该能够跟踪其推理并直接为sqrt(没有倒数)设计类似的方法。
答案 1 :(得分:2)
Wikipedia也有一篇文章和代码。并且another wikipedia article显示了一个算法(即使是大于2的根),它可以很容易地用二进制实现(因此,涉及对位的操作)。
如果你只想坚持真正的按位运算符,你必须使用Ands,Ors,Xors,Nots来实现+
...如果你想根据IEEE在浮点数上做,你需要更多的工作(维基百科中的第一个代码可以直接在尾数上使用,可能在某些限制下,并相应地调整指数......你必须弄清楚如何!)
答案 2 :(得分:1)
不......我认为这是为了表现?如果是这样,你可能会得到的最好的就是使用查找表。如果您可以选择使用整数数学(例如,通过使用数字乘以10,100或1000而不是浮点数),您可以使用按位旋转来快速抛弃不需要的精度并跳转到查找表。