在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)就都是零了,同时每次换那个前后加减的数,都会使误差变动很大,求大佬讲解这个原理。