R语言关于根号二的平方的误差问题

在Rstudio中,我发现一个数的平方根再平方,得出的结果和原数有误差,如

> sqrt(2)^2-2
[1] 4.440892e-16)^2-2



如果把这个当作计算机的小数点取舍,那么我运行第二段程序发现这个

> for(i in 1:10) print(sqrt(i)^2-i)
[1] 0
[1] 4.440892e-16
[1] -4.440892e-16
[1] 0
[1] 8.881784e-16
[1] -8.881784e-16
[1] 8.881784e-16
[1] 1.776357e-15
[1] 0
[1] 1.776357e-15

其中误差等于零的是完全平方数,然后剩下的数的误差有一样的,还有跳跃较大的,还甚至有负数的??搞不懂了。

然后还有这种

> for(i in 1:10) print(1+sqrt(i)^2-(i+1))
[1] 0
[1] 4.440892e-16
[1] -4.440892e-16
[1] 0
[1] 8.881784e-16
[1] -8.881784e-16
[1] 0
[1] 1.776357e-15
[1] 0
[1] 1.776357e-15


> for(i in 1:10) print(2+sqrt(i)^2-(i+2))
[1] 0
[1] 0
[1] 0
[1] 0
[1] 8.881784e-16
[1] -8.881784e-16
[1] 0
[1] 1.776357e-15
[1] 0
[1] 1.776357e-15

在根号i前后进行运算,对于这个2和(i+2),当我取8与(i+8)时,这十组运算的误差就都消失了


> for(i in 1:10) print(7+sqrt(i)^2-(i+7))
[1] 0
[1] 0
[1] 0
[1] 0
[1] 0
[1] 0
[1] 0
[1] 1.776357e-15
[1] 0
[1] 0


> for(i in 1:10) print(8+sqrt(i)^2-(i+8))
[1] 0
[1] 0
[1] 0
[1] 0
[1] 0
[1] 0
[1] 0
[1] 0
[1] 0
[1] 0

最后发现,对于任意一个循环的次数,比如上面的10,都有一个小于它的数可以使这sqrt(i)^2-i的误差降到零,经过试验,循环1:50时,32+sqrt(i)^2-(i+32)就都是零了,同时每次换那个前后加减的数,都会使误差变动很大,求大佬讲解这个原理。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问