这是学习笔记的第 2161 篇文章
学生时代,我们忙于应试,将许多“为什么”抛之脑后。面对未知,我们往往选择默认接受,例如,你真的理解√2吗?
你是否思考过:√2为什么是无理数?我们如何计算它?
或许大多数人的反应是:“1+1开根号就是啊,至于为什么,规定就是这样呗!”诚然,√作为一种符号的确如此,但这远非问题的全部答案。
追根溯源,这个问题比我们想象的更复杂,它可以追溯到古希腊时期。
公元前500年,古希腊数学家毕达哥拉斯(Pythagoras)提出“万物皆为数”(指有理数)的观点。他的学生希伯索斯(Hippasus)却发现一个令人震惊的事实:正方形的对角线与其一边的长度之比无法用有理数表示,这与毕氏学派的理念背道而驰。 这一发现令学派恐慌,希伯索斯最终被残忍地杀害。
要计算√2的值,我们可以将其拆解为两个问题:
1)如何证明√2是无理数?
2)如何计算√2的无理数值?
让我们带着求知欲,一起探索√2为什么是无理数。
方法一:尾数证明法:
假设√2是有理数,则可以表示为a/b的形式,其中a和b都是正整数,且a、b互质(最大公因数为1)。
步骤一:√2=a/b,则a²=2b²
步骤二:根据平方数的性质,b²的尾数只能是0、1、4、5、6、9,不可能是2、3、7、8。
步骤三:2b²的尾数只能是0、2、8。
步骤四:由于a²=2b²,所以a²的尾数也只能是0,而不能是2或8。
步骤五:因为2b²一定是偶数,所以b²的尾数只能是0或5。
步骤六:根据上述推导,a和b都存在公因数5,这与a、b互质的假设矛盾。
√2是无理数。
方法二:奇偶分析法
假设√2=a/b,则a²=2b²,其中a和b都是正整数,且a、b互质。
1)由2b²可知,a²是偶数,因此a也是偶数,可以设a=2c。
2)将a=2c代入a²=2b²,得到4c²=2b²,化简得b²=2c²,因此b²也是偶数,b也是偶数。
3)a和b都是偶数,这与a、b互质的假设矛盾。
√2是无理数。值得一提的是,希帕索斯正是用这种方法证明√2的无理性。
除了上述两种方法,还有其他方法可以证明√2是无理数,本文不再一一列举。
接下来,我们探讨如何计算√2的值。以下几种方法较为易懂:
方法一:连分数法
我们知道(√2+1)(√2-1)=1,以此为基础进行推导。
√2-1=1/(√2+1)
√2 = 1+ 1/(√2+1),将√2代入等式右侧,得到
√2 = 1+ 1/(1+ 1/(√2+1)+1) = 1+ 1/(2+ 1/(√2+1))
继续推导:
√2=1+ 1/(2+ 1/(√2+1)) = 1+ 1/(2+ 1/(1+ 1/(√2+1)+1)) = 1+ 1/(2+ 1/(2+ 1/(√2+1)))
这种方法称为连分数法,通过不断迭代可以得到越来越精确的√2值。
方法二:迭代法
√2显然大于1,可以设√2 = y = 1+x
将上式平方,得到
2 = (1+x)(1+x)
展开得到
2 = 1 + x² + 2x + 1
化简得
x² + 2x = 0
进一步推导,得
x(x + 2) = 0
所以
x = 1/(x + 2)
因此
1/x = 2 + x = 2 + 1/(2x) = 2 + 1/(2 1/(x + 2))
= 2 + 1/(2 1/(1/(x + 2) + 2))
通过不断迭代,可以得到越来越精确的√2值。
计算机如何计算√2?
除了上述方法,还有许多更高级的方法可以计算√2,例如牛顿迭代法、二分法等。
在计算机领域,有一种神奇的算法可以快速计算√2,其名为“0x5f375a86”。这个算法看起来像一个内存地址,据传比牛顿迭代法快4倍。其核心代码如下:
i = 0x5f375a86 - (i>>1);
至今,人们仍未完全理解这个常数的由来。值得一提的是,这个常数最初是0x5f3759df,后来Lomont通过暴力穷举找到了更优值0x5f375a86。Lomont将他的发现写成论文《Fast Inverse Square Root》。