楼主: 江夏雁
1272 4

[问答] 这是R 语言中的bug吗? [推广有奖]

  • 20关注
  • 2粉丝

朋友

教授

57%

还不是VIP/贵宾

-

威望
0
论坛币
565 个
通用积分
5.4453
学术水平
8 点
热心指数
9 点
信用等级
-4 点
经验
40942 点
帖子
843
精华
0
在线时间
613 小时
注册时间
2010-6-24
最后登录
2025-2-26

楼主
江夏雁 在职认证  发表于 2020-6-27 22:32:08 |AI写论文
10论坛币


03.png
如图所示

  factors2<-c(50,25,20,10,5,4,2,1)
用max(a1,b1) (相当于66),对上面这个向量取余数计算,最后两个元素为2 和1

但是正常而言,最后两个应该都是0
如果用数字66直接对factor2取余数计算,就可以得到正确的答案。

请问这个是为什么,多谢!


附上这一段代码,
x<-0.34
  a1<-100*x
  b1<-100*(1-x)
  factors2<-c(50,25,20,10,5,4,2,1)
  resident2<-(max(a1,b1))%%factors2
  position<-which(resident2==0)[1]




02.png (5.07 KB)

02.png

最佳答案

maths_hjxk 查看完整内容

这里涉及到浮点数问题。 max(a1,b1)是个浮点数,它与66相差-1.421085e-14,即小于66。就导致它与66的求余结果有些不同。 要保证max(a1,b1)与66的求余结果,只能建议如下方法
关键词:bug factors factor Facto fact
若无人伴你 愿你成你自己的太阳

沙发
maths_hjxk 发表于 2020-6-27 22:32:09
这里涉及到浮点数问题。
max(a1,b1)是个浮点数,它与66相差-1.421085e-14,即小于66。就导致它与66的求余结果有些不同。
要保证max(a1,b1)与66的求余结果,只能建议如下方法
  1. round(max(a1,b1))%%factors2
复制代码

已有 1 人评分论坛币 收起 理由
cheetahfly + 10 热心帮助其他会员

总评分: 论坛币 + 10   查看全部评分

藤椅
llb_321 在职认证  发表于 2020-6-28 10:53:42
这个确实是bug,但也可以说不是bug。
这种情况,可能是R浮点运算导致的。重点是0.34。
你在rstudio中,试一下这个代码
as.integer(100*(1-0.34))
看看结果是什么,是不是65?好玩吧?
已有 1 人评分论坛币 收起 理由
cheetahfly + 10 热心帮助其他会员

总评分: 论坛币 + 10   查看全部评分

板凳
江夏雁 在职认证  发表于 2020-6-28 14:16:45
maths_hjxk 发表于 2020-6-27 22:32
这里涉及到浮点数问题。
max(a1,b1)是个浮点数,它与66相差-1.421085e-14,即小于66。就导致它与66的求余结 ...
多谢,方便多说一下吗?为什么max(a1,b1)是个浮点数,它与66相差-1.421085e-14,即小于66。

报纸
maths_hjxk 发表于 2020-6-28 15:11:47
江夏雁 发表于 2020-6-28 14:16
多谢,方便多说一下吗?为什么max(a1,b1)是个浮点数,它与66相差-1.421085e-14,即小于66。
R中数值运算一般都是浮点运算,可以百度一下浮点数或浮点运算
简单的说除了指定情况外(加L或冒号运算),都是近似数,比如在R中根号的平方并不等于2,只是近似

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-1-8 16:03