全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 R语言论坛
1834 7
2019-11-10
同一个数据,我把它输入到一个大函数中,该函数包含一个计算互信息的函数命名为MI,输出的中间结果是一个极小的负值,如:-2.5232e-17


然而,我把该数据直接输入到MI这个函数里,得到值为0,而真实的值应该为0.

不知道哪位大神遇到该问题,请教是什么原因导致该结果的发生,又是如何解决的?谢谢!
二维码

扫码加我 拉你入群

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

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

全部回复
2019-11-10 21:45:46
浮点精度问题,很普遍,不诡异,你试试
sqrt(2) ^ 2 == 2
identical(sqrt(2) ^ 2, 2)
解决办法:
all.equal(sqrt(2) ^ 2, 2)
二维码

扫码加我 拉你入群

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

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

2019-11-11 08:48:45
多谢回答,原来是精度问题。
那有没有办法把那个极小数-2.5232e-17 变成0?谢谢!
二维码

扫码加我 拉你入群

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

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

2019-11-11 09:27:14
比如:sum(c(2,1.2,-0.8,-2.4,3,1.2,3.1,-1.5,-4.4,-1.4))得到的结果是-2.220446e-16,
我现在只想让其结果得到0,不能用as.integer(),turnc() 这样的函数。求大神帮忙,多谢!
二维码

扫码加我 拉你入群

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

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

2019-11-11 13:23:24
round(sum(c(2,1.2,-0.8,-2.4,3,1.2,3.1,-1.5,-4.4,-1.4)), 8)
二维码

扫码加我 拉你入群

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

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

2019-11-11 14:28:42
cheetahfly 发表于 2019-11-11 13:23
round(sum(c(2,1.2,-0.8,-2.4,3,1.2,3.1,-1.5,-4.4,-1.4)), 8)
厉害啊,大神!是我想要的答案!非常感谢!
二维码

扫码加我 拉你入群

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

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

点击查看更多内容…
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群