这篇文章跟我的上一篇"使用牛顿法解决开平方问题"直接相关,当时在书写牛顿法的迭代代码时,需要判断循环终止的条件。Princeton大学的版本使用的是while (Math.abs(t - a / t) > EPSILON * t)
这样的语句,初看貌不惊人,实际上思考起来却大有玩味。不要看就这简简单单的几行程序,我相信会有很多人在第一次写的时候,会像我一样写成while (Math.abs(a - t * t) > EPSILON)
或者是比较当前值和下一次运算迭代值的while (Math.abs(a / t - t) / 2.0 > EPSILON)
这个样子。实际上,后两种的写法都是有问题的。那么这里面的学问是什么呢?这就需要我们对于计算机的浮点数运算有深入的理解才能进行回答。
使用牛顿法解决开平方问题
这个问题的起因是我在做leetcode上的一道题延伸出来的,原题目是Leetcode 69. Sqrtx。不过这道题目还是做了很大的简化,它只让我们找出符合要求的整数解。在实际运算中,我们显然希望获得一个开平方的精确小数值,比如说像 \(\sqrt{2} = 1.414214, \sqrt{3} = 1.732051\) 这个样子。这里就需要使用牛顿法来进行求解了。这也是目前计算机学科中进行开平方运算的标准方法。下面我就来详细说说对这一算法的分析。
使用Hexo搭建个人博客(VPS+Git+Apache2)
长期以来购买的国外VPS只是在进行代理转发的服务,然而现在DigitalOcean的最低价格的服务器配置也相当可以了。因此最近想来再多利用一下花钱买到的资源,就有了搭建个人博客的想法。希望能通过这种方式,同时勉励一下自己养成学习记录的好习惯吧。(CS知识真的是博大精深,有时候看一遍过段时间就忘了)
Hello World
发表于
更新于
本文字数: 299 阅读时长 ≈ 1 分钟
本文字数: 299 阅读时长 ≈ 1 分钟
Welcome to Hexo! This is your very first post. Check documentation for more info. If you get any problems when using Hexo, you can find the answer in troubleshooting or you can ask me on GitHub.