我正在实现自己的数学库,目前我需要规范化向量和四元数。
性能对我来说将是一个大问题,因此我一直在想,因为我的数字可能会扩展到相当高的限制,C ++中的std::sqrt
函数执行得越来越慢数字的大小是增加还是总是在相同的时间内执行?
这个问题与C ++ 11中的性能有关。
答案 0 :(得分:3)
在实践中,没有。
现代系统上的浮点数表示为符号,指数和尾数。这里的标志必须为0,这很容易。取两个数字,x
和4*x
。它们表示的唯一区别是第二个的指数高2。 (除非在范围的极端,4*x
可能是+INF
,但我们会忽略它。)
现在sqrt(4*x) == 2 * sqrt(x)
我们在这里看到结果的指数高一个,但尾数是相同的。
这意味着计算平方根所需的时间并不显着取决于数字的指数。你只需要在恒定时间内考虑4^n
。 sqrt(x)
的难点在于计算结果的尾数,这只取决于两件事:输入的尾数和输入指数是否为奇数。
答案 1 :(得分:0)
如果您担心自己的实施,我建议您实施
Babylonian Method for Square Root --> it is much faster then others..
为babyionian提供的其他几个链接
http://mathlesstraveled.com/2009/05/18/square-roots-with-pencil-and-paper-the-babylonian-method/
http://www.homeschoolmath.net/teaching/square-root-algorithm.php