C++ 计算机如何计算平方根?

C++ 计算机如何计算平方根?,c++,math,process,low-level,square-root,C++,Math,Process,Low Level,Square Root,计算机如何计算平方根? 我是说那里发生了什么事!它是如何处理的!! 它是否使用了一些数学方法,比如牛顿法? 三角函数呢?几乎所有这些数学函数。 在每种语言都有自己的方式的情况下,请让我们来讨论C++。< /P> < P>我认为牛顿的迭代收敛法是用在计算平方根< /P > < P >大多数现代非嵌入式CPU(例如,x86和较大的ARM内核)都有直接计算平方根的硬件指令。支持这些指令的硬件实现各不相同,但通常是教科书逐位算法的一种变体(尽管不总是以2为基数;也可以使用4或16为基数)。这些通常是CP

计算机如何计算平方根? 我是说那里发生了什么事!它是如何处理的!! 它是否使用了一些数学方法,比如牛顿法? 三角函数呢?几乎所有这些数学函数。
在每种语言都有自己的方式的情况下,请让我们来讨论C++。< /P> < P>我认为牛顿的迭代收敛法是用在计算平方根< /P > < P >大多数现代非嵌入式CPU(例如,x86和较大的ARM内核)都有直接计算平方根的硬件指令。支持这些指令的硬件实现各不相同,但通常是教科书逐位算法的一种变体(尽管不总是以2为基数;也可以使用4或16为基数)。这些通常是CPU上最慢的基本算术运算之一;像16-64周期这样的计时并不少见,而且这些指令通常不是流水线的

在缺少直接硬件平方根指令(安腾、PPC等)的CPU上,典型的方法是生成初始估计值(使用生成估计值的指令或查找表),然后使用迭代方法(通常为牛顿或戈德施密特)细化该估计值。如果你感兴趣的话,你可以找到彼得·马克斯坦或罗杰·高利弗关于这个主题的一些著作

更复杂的数学函数(如trig运算)通常是通过将参数缩减到某个基本域,然后用多项式或有理函数逼近来计算的。您可以查看在线提供的几个数学库中的任何一个的源代码,以获取更多详细信息(fdlibm是一个很好的起点)


x86指令集提供了许多支持exp、log和sin等数学函数的指令,但这些指令已不再常用,因为良好的软件库实现提供了更好的性能。

正如其他人所指出的,这是一个非常广泛的问题-对于硬件实现来说,什么适合软件可能是一个糟糕的选择;还有IEEE-754、硬件查找表等的正确舍入问题。有很多开源C库,还有
libm
实现。可以找到经典方法和现代方法的良好概述。

另一种尚未提及的可能性是。CORDIC在软件中的应用并不广泛,但在硬件中却相当普遍,在不使用大量门的情况下,它在获得良好性能方面做得相当出色。

你的问题太广泛了。看看可能重复的Hmm,但从文章中看,它似乎是一种软件优化方法?@Pacerier:我在文章中没有看到任何暗示(尽管我在软件中也非常成功地使用了它)。关于软件平方根的主题:你是这段代码的作者吗?许可证是什么?它可以在GPLv3下使用吗?谢谢。@airafr该文件上的许可证与大多数苹果的开源软件一样,是APSL v2。