楼主: suchener
1555 6

[问答] R真是奇葩啊,这个怎么办 [推广有奖]

  • 0关注
  • 0粉丝

已卖:1份资源

博士生

18%

还不是VIP/贵宾

-

威望
0
论坛币
1520 个
通用积分
0.8480
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
271 点
帖子
18
精华
0
在线时间
491 小时
注册时间
2013-4-19
最后登录
2025-8-30

楼主
suchener 学生认证  发表于 2017-2-22 11:06:09 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
这个数列中的0.013那一项居然和数字0.013相差了10^-18,这到底是怎么回事
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:怎么办

无标题.png (29.69 KB)

无标题.png

沙发
AlexYoung757 在职认证  学生认证  发表于 2017-2-22 11:28:13
应该是不同计算机精度导致

藤椅
suchener 学生认证  发表于 2017-2-22 11:36:49
AlexYoung757 发表于 2017-2-22 11:28
应该是不同计算机精度导致
我两台电脑都是这个结果,一个是i7-4790k,另一个是6700k,都是64位windows8.1,这个不应该啊,我定义的是seq(0.01,0.03,0.003),存储变量应该就是0.013,为什么给我存储成了0.013+1.734723*10^-18 ?

板凳
boss0577 发表于 2017-2-22 12:43:14
大部分程序如果使用浮点位都是这样的,就是精度造成的。
可以参考help("==")
  1. x1 <- 0.5 - 0.3
  2. x2 <- 0.3 - 0.1
  3. x1 == x2                           # FALSE on most machines
  4. identical(all.equal(x1, x2), TRUE) # TRUE everywhere
复制代码
已有 1 人评分学术水平 收起 理由
jameschin007 + 5 精彩帖子

总评分: 学术水平 + 5   查看全部评分

报纸
suchener 学生认证  发表于 2017-2-23 12:08:19
boss0577 发表于 2017-2-22 12:43
大部分程序如果使用浮点位都是这样的,就是精度造成的。
可以参考help("==")
膜拜大神!

地板
qiu435 发表于 2017-2-23 14:57:05
数值向量分为Double和integer两种,前者采用浮点计算。看下面例子你就知道差别了:
sqrt(2)^2-2  #doublel类型
[1] 4.440892e-16
as.integer(sqrt(2)^2)-2 #integer类型
[1] 0

sqrt(2)^2 == 2
[1] FALSE
as.integer(sqrt(2)^2) == 2
[1] TRUE

near(sqrt(2)^2,2) #double类型用near()函数进行近似比较
[1] TRUE

楼主明白没?几乎所有软件都是浮点运算

7
suchener 学生认证  发表于 2017-2-23 15:28:18
boss0577 发表于 2017-2-22 12:43
大部分程序如果使用浮点位都是这样的,就是精度造成的。
可以参考help("==")
那个是因为无理数被四舍五入的原因造成了不相同,这个只有三位小数的有理数也是这个结果,浮点位数据的存储和加减有点生疏了,应该是浮点位的问题,我用matlab也是这个结果。很多程序的条件判断我得改一改了,要不然遇到这种情况,程序直接跳过,这个错误可就大了,得用all.equal或者near了

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-23 10:46