远山繁星 2018-12-06 04:55
浏览 2618

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

  • 写回答

0条回答 默认 最新

    报告相同问题?

    悬赏问题

    • ¥20 求一个html代码,有偿
    • ¥100 关于使用MATLAB中copularnd函数的问题
    • ¥20 在虚拟机的pycharm上
    • ¥15 jupyterthemes 设置完毕后没有效果
    • ¥15 matlab图像高斯低通滤波
    • ¥15 针对曲面部件的制孔路径规划,大家有什么思路吗
    • ¥15 钢筋实图交点识别,机器视觉代码
    • ¥15 如何在Linux系统中,但是在window系统上idea里面可以正常运行?(相关搜索:jar包)
    • ¥50 400g qsfp 光模块iphy方案
    • ¥15 两块ADC0804用proteus仿真时,出现异常