div 记忆 自己实现 其中 收获 老师 code clu 设置
看了MIT的6.00的计算机科学导论课的第一节,其中,老师讲的一个sqrt的实现算法记忆犹新。
代码如下:
- #include < stdio.h > #define E 1e-10 double Abs(double a, double b) {
- if (a - b < 0) {
- return b - a;
- }
- return a - b;
- }
- double Sqrt(double value) {
- double i,
- last = 0,
- cur = 0;
- for (i = 0; i * i < value; i++);
- i--;
- do {
- last = cur;
- i = (value / i + i) / 2;
- cur = i * i;
- } while ( Abs ( cur , last ) > E);
- return i;
- }
代码写的有点丑,效率可能也不会比库函数高(记得网上看到过有比库函数效率高的,不过你们自己去查把。。。),但是大致的思想还是很有收获的。
这个算法就是根据一个数的平方根的平方等于这个数来建立的。
假设求的是16的平方根
猜想数g g^2x/g(x/g + g)
3 9 16/316/3 + 3
16/3+3 ......
依次迭代直到x - g^2达到指定的精度,就是所求得结果,我这里设置的是E = 10e-10。
然后就是感叹一下,同样是大学,差距真的是。。。。
自己实现的一个sqrt函数
来源: http://www.bubuko.com/infodetail-2320289.html