平方根在数学中是一个非常重要同时也非常复杂的运算,在计算机中实现这种函数通常比较困难,所以编程语言一般都会对这些函数进行封装,程序员在编程的时候,如果涉及到平方根运算,直接调用函数库中的函数就行了。很少有人会懂得底层到底是如何实现的。
而且,能够实现是一方面,能不能做到运算效率高效又是另外一方面。
程序的运行效率,往往就是高手和菜鸟之间的重要区别,真正的黑客,编程的时候。不仅仅只是将功能实现,还会追求最高效率,有时候可能只是一个符号的变化,其执行效率便天差地别。
执行一次的区别可能看不出来,可是如果循环一千次,一万次呢?
高手和菜鸟编写的程序,在效率上往往有着很多倍的差距,要想编写出高效优雅的程序,必须有着对编程语言和计算机底层的本质理解。同时还得拥有丰富的编程经验,在这方面可做不得假,实践是唯一提高自身实力的方式。
林鸿知道,求平方根的运算,有一个算法叫做牛顿迭代法,其原理为:
如果一个数为x,假设它的平方根为y,
如果y的平方和x相差大于某个给定的误差,就继续假设下一个值,如此持续下去,直到最终得到在允许误差内的值。
至于如何假设这个值。使用的方式便是取平均值。其中必须多次用到除法和乘法。
在计算机中,其本质其实就是加法。整个cpu的运算其实就是一个加法器,当初林鸿实现超脑cpu结构的时候,就是基于一个加法器结构,至于后面的减法、乘法以及除法等运算,都是对在这个加法器的基础上衍伸而来。
直接使用牛顿迭代法来求平方根,这是普通人的做法,林鸿不用想都知道,如果真的按照这种方式来实现,显然不能过关。
林鸿略微一思索便有了头绪,他查看了一下电脑中的编译器,发现这台电脑里面准备得非常充分,不但有市面上常见的一些编程语言编译器,如c、
aisc、java、c++等语言,甚至还有一些非常小众的编程语言,如ada、
lue、lisp等等。
最终,林鸿还是调出了电脑中的c语言编译器,直接敲起代码来。
霹雳啪啦,仅仅过了二十来秒之后,林鸿便完成了函数的编写。
他调用用函数执行了一下,程序成功运行,没有任何地错误,一次通过。