前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >怎么证明根号2是无理数,我们来推导和计算,还有逼格极高的算法

怎么证明根号2是无理数,我们来推导和计算,还有逼格极高的算法

作者头像
jeanron100
发布2019-11-24 00:47:42
3.2K0
发布2019-11-24 00:47:42
举报

记得上学的时候忙着考试,把心头的一些为什么都压在了脑后。

面对未知,我们大多数人都选择了默认接受,其实你不懂根号2,

比如:根号2(√2)为什么是无理数,我们有什么办法去计算它

当我冒出这个想法的时候,其实大部分人的反映都一样1+1开根号就是啊,至于为什么,就是规定呗,当然把根号作为一种符号确实如此,但是离结果还差了很远。

这个问题追根溯源,会发现远比我们想象的要复杂,得追溯到古希腊时期。

毕达哥拉斯(Pythagoras,约公元前580年至公元前500年间)是古希腊的大数学家,他提出“万物皆为数”的观点。公元前500年,毕达哥拉斯学派的弟子希伯索斯(Hippasus)突然发现好像有些情况解释不了,比如一个正方形的对角线与其一边的长度,这明显与毕氏学派的“万物皆为数”(指有理数)的哲理大相径庭,使得学派领导人很惶恐,最后被毕氏门徒残忍地投入了水中杀害。

要去计算根号2的值,我们可以拆分为两个问题。

1)怎么证明根号2是无理数

2)根号2的无理数值是怎么计算出来的?

我们来从求知的角度来证明下根号2(√2)为什么是无理数?

方法1:尾数证明法:

假设根号2是一个有理数,那么根号2就可以使用a/b的形式来标识,其中(a,b)=1,(表示a 与 b 最大的公因数是1),a和b都是正整数,明确了这些条件,我们就开始证明了。

第1步:√2=a/b 那么可以得到a*a=2*b*b

第2步:从数的平方我们可以很快得到,b*b的尾数范围是 (0,1,4,5,6,9)中的一个数,不可能是2,3,7,8,这个道理不难理解;

第3步:2*b*b的尾数范围是(0,2,8)中的一个数,

第4步:因为a*a=2*b*b,那么a*a的尾数范围可以排除2和8,只有0

第5步:因为2*b*b得到的值肯定是一个偶数,那么b*b的尾数范围是(0,5)

第6步:按照目前的尾数可选项,a和b存在公因数5,和(a,b)=1是相矛盾的。

所以根号2是一个无理数。

方法2:奇偶分析法

假设√2=a/b 那么可以得到a*a=2*b*b,(a,b)=1,(表示a 与 b 最大的公因数是1,a和b都是正整数

1)根据2*b*b可以推得a是一个偶数,我们可以设置a=2c

2)4*c*c=2*b*b得到 b*b=2*c*c,可以得到b也是偶数

3)a,b都是偶数,这和(a,b)=1相矛盾

所以根号2是一个无理数,可以说明的是希帕索斯就是用这种方法证明的。

还有很多种方法补充,差不多有8种左右,我就不一一罗列了。

如何计算根号2的值呢,查找了不少资料,我觉得这几种方法还是能消化的。

方法1:

(√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的,所以我们可以按照y=x+1的函数来表示,即

√2 = y=1+x

对上式做平方,得到

2=(1+x)(1+x),得到

2=1+x*x+2*x+1,进一步得到,

x*x+2*x=1,推得,x*(x+2)=1,得到

x=1/(x+2),所以

1/x=2+x=2+1/(2*x)=2+1/(2*1/(x+2))

=2+1/(2*1/(1/(x+2)+2))

按照这种方式可以不断的推导,得到更加精确的值。

计算机如何计算根号2

当然还有很多高大上的方法来进一步辅助,比如牛顿迭代法,二分法等

那么如何在计算机中来计算得到根号2呢, 这里要介绍一个传奇算法:算法名字就是:0x5f375a86,看起来像是一个内存地址一样,该算法据说比牛顿迭代法快4倍,核心的代码类似下面这样:

i = 0x5f375a86 - (i>>1);

至今为止仍未能确切知晓此常数的起源 ,值得一提的是这个值最初为0x5f3759df,后来由Lomont通过暴力穷举找到这个更优值,即0x5f375a86

Lomont采用暴力方法逐步尝试,终于找到一个比之前的好那么一丁点的数字,虽然实际上这两个数字所产生的结果非常近似,这个暴力得出的数字是0x5f375a86,为此他写了一篇论文《Fast Inverse Square Root》

点击查看这篇论文,我是被震撼到了。 http://read.pudn.com/downloads500/sourcecode/math/2081845/Fast_Inverse_Square_Root.pdf

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-11-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 杨建荣的学习笔记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档