楼主: yuan1615
1538 6

[问答] R语言灵异事件? [推广有奖]

  • 3关注
  • 12粉丝

已卖:673份资源

讲师

52%

还不是VIP/贵宾

-

威望
0
论坛币
73166 个
通用积分
7.6770
学术水平
6 点
热心指数
16 点
信用等级
11 点
经验
23763 点
帖子
299
精华
1
在线时间
640 小时
注册时间
2015-10-12
最后登录
2025-8-1

楼主
yuan1615 在职认证  发表于 2017-4-25 10:18:13 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
O8~V@)YVP9GW`CJ4J[0BOI9.png 4]K)O`D)}I[UP73H3Y97A_G.png
5ZJWMP52%O{Y[HP3ESR4~)7.png

这个不应该都是False吗?我用的as.numeric()都不行,直接换成89.98就行了,为什么?
二维码

扫码加我 拉你入群

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

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

关键词:灵异事件 R语言 numeric Eric NUM 灵异事件

O8~V@)YVP9GW`CJ4J[0BOI9.png (17.67 KB)

O8~V@)YVP9GW`CJ4J[0BOI9.png

4]K)O`D)}I[UP73H3Y97A_G.png (17.01 KB)

4]K)O`D)}I[UP73H3Y97A_G.png

5ZJWMP52%O{Y[HP3ESR4~)7.png (18.2 KB)

5ZJWMP52%O{Y[HP3ESR4~)7.png

沙发
jiangbeilu 学生认证  发表于 2017-4-25 11:45:47
一种可能是space[5]你看到的89.98是一个近似数。
根据你提供的信息,一种可能的情况是:
space[5]是比89.98小的数,比如 89.978888888这样的数,然后在R里面显示的是89.98.所以当真的89.98出来时,肯定比space[5]这个假的89.98要大一些了。
已有 1 人评分经验 收起 理由
李会超 + 60 热心帮助其他会员

总评分: 经验 + 60   查看全部评分

藤椅
yuan1615 在职认证  发表于 2017-4-25 12:45:19
jiangbeilu 发表于 2017-4-25 11:45
一种可能是space[5]你看到的89.98是一个近似数。
根据你提供的信息,一种可能的情况是:
space[5]是比89. ...
多谢回答,我是用以下方法生成的
CM])6SMAH54M3R$SM@I7VEM.png

板凳
jiangbeilu 学生认证  发表于 2017-4-25 14:42:22
pressure$Close 这个向量的数据结构,可能并不是两位小数。

报纸
jiangbeilu 学生认证  发表于 2017-4-25 15:50:12
先看这样的例子:
  1. space1 <- seq(89.94, 89.98, by=0.01)

  2. space2 <- seq(89.96 - 0.02, 89.96 + 0.02, by=0.01)

  3. AA <- c(89.94, 89.95,89.96,89.97,89.98)

  4. space1 == AA

  5. space2 == AA
复制代码

然后会发现,问题简化之后,变成:
89.96+0.02==89.98
为什么结果是FALSE

看一下两种形式在R里存储的情况:
  1. sprintf("%.54f",89.96+0.02)
  2. [1] "89.979999999999989768184605054557323455810546875000000000"
  3. sprintf("%.54f",89.98)
  4. [1] "89.980000000000003979039320256561040878295898437500000000"
复制代码

然后,会发现其实计算机在计算小数时,跟我们的直觉是不同的,应该是在计算 89.96+0.02,89.96被转化成另一种形式的数据,0.02也是,在计算后,再转化成十进制的数,变成89.98,当然这个89.98是一个约数。
而直接对89.98进行转化,得到的结果并不一定与89.96+0.02计算的结果完全一致,但精度是得到保证的。
在判断时,用all.equal会好一些。
  1. all.equal(89.96+0.02,89.98)
复制代码

这个得到的结果是TRUE。

地板
yuan1615 在职认证  发表于 2017-5-17 15:00:02
jiangbeilu 发表于 2017-4-25 15:50
先看这样的例子:

然后会发现,问题简化之后,变成:
恩恩,那要是>,     <怎么比较呢,有什么样的函数

7
jiangbeilu 学生认证  发表于 2017-5-18 17:16:55
yuan1615 发表于 2017-5-17 15:00
恩恩,那要是>,
A与B比较大小,
sign(A-B),如果为1则代表A大于B,为0则A小于B。

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

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