avatar
R软件存在重大bug# Biology - 生物学
G*G
1
round(2.5)
2
round(3.5)
4
(0.1+0.05)>0.15
it gives you the answer 'TRUE'.
avatar
c*u
2
这个是round half to even吧。
avatar
G*G
3
which function is not round half to even in R?
and have you checked the second one?
(0.1+0.05) >0.15
R gives answer, TRUE

【在 c****u 的大作中提到】
: 这个是round half to even吧。
avatar
D*a
4
是因为数字存储方式吧
> (0.1+0.05) - 0.15
[1] 2.775558e-17
avatar
e*o
5
Re
lz 整天提些稀奇古怪的问题
不过 几年之后肯定比整天做实验好

【在 D*a 的大作中提到】
: 是因为数字存储方式吧
: > (0.1+0.05) - 0.15
: [1] 2.775558e-17

avatar
s*s
6
第一个完全正确啊,怎么叫bug?
第二个没办法,也算是bug把。不过人家数据这样存的,你一定要用
完美的小数点以后的比较方法,也不是不可以。

【在 G***G 的大作中提到】
: round(2.5)
: 2
: round(3.5)
: 4
: (0.1+0.05)>0.15
: it gives you the answer 'TRUE'.

avatar
G*G
7
Who uses 'round to even'?
I don't think the first one is good one.

【在 s******s 的大作中提到】
: 第一个完全正确啊,怎么叫bug?
: 第二个没办法,也算是bug把。不过人家数据这样存的,你一定要用
: 完美的小数点以后的比较方法,也不是不可以。

avatar
s*s
8
come on.
不懂就去google 一下。大多数科学计算都是round to even, 或者类似的。
你小学学的最简单的round有一个重大的问题,就是正负数round有bias。

【在 G***G 的大作中提到】
: Who uses 'round to even'?
: I don't think the first one is good one.

avatar
K*n
9
其实小学学的round 2.5和4.5 应该round到几?是传说中的四舍五入么?

【在 s******s 的大作中提到】
: come on.
: 不懂就去google 一下。大多数科学计算都是round to even, 或者类似的。
: 你小学学的最简单的round有一个重大的问题,就是正负数round有bias。

avatar
K*n
10
无论如何,(0.1+0.05)>0.15 是处这一点还是很令人震惊的
这泥马还玩儿不玩儿了。以前不知道,原来R君是这样的人啊。太过分了!
avatar
s*y
11
呵呵,好像以前我们学编程的时候就说过这种事情,要比较两个浮点数 a>b 的时候最
保险的方法是检查 (a-b) > zero, 然后把zero 定义成一个该系统里最小的数字。

【在 K****n 的大作中提到】
: 无论如何,(0.1+0.05)>0.15 是处这一点还是很令人震惊的
: 这泥马还玩儿不玩儿了。以前不知道,原来R君是这样的人啊。太过分了!

avatar
s*s
12
小学最早就是四舍五入啊,教的多点的会让你到偶数

【在 K****n 的大作中提到】
: 其实小学学的round 2.5和4.5 应该round到几?是传说中的四舍五入么?
avatar
s*s
13
这个很正常啊。大多数程序都是这样的,除非你调用特别的方法。
浮点数二进制当然不是正好的,不仅是R,你试一下最基本的bash awk
也一样,不值得大吃一惊

【在 K****n 的大作中提到】
: 无论如何,(0.1+0.05)>0.15 是处这一点还是很令人震惊的
: 这泥马还玩儿不玩儿了。以前不知道,原来R君是这样的人啊。太过分了!

avatar
a*a
14
不要随意比较两个浮点数,浮点数是有误差的

【在 G***G 的大作中提到】
: round(2.5)
: 2
: round(3.5)
: 4
: (0.1+0.05)>0.15
: it gives you the answer 'TRUE'.

avatar
j*e
15
你学一下system programming (用C) 就知道怎么回事了。所有language都这样。计
算机是二进制的,都是非连续的。
有些语言用class来存储大的数字,貌似PL-SQL就有。
最后还是看你对精度的要求,要求高的话就不要用float和double.
avatar
K*n
16
果然如此啊! 今次又学到了数值计算的要领 machine epsilon
echo ""|awk '{if(0.10+0.05 > 0.15){print "wtf"}}'
wtf
python -c "print 0.15+0.05 > 0.15"
True
不过这是为什么?
python -c "print (0.10*10+0.05*10 == 0.15*10)"
True
echo ""|awk '{if(0.10*10+0.05*10 == 0.15*10){print "wtf"}}'
wtf

【在 s******s 的大作中提到】
: 这个很正常啊。大多数程序都是这样的,除非你调用特别的方法。
: 浮点数二进制当然不是正好的,不仅是R,你试一下最基本的bash awk
: 也一样,不值得大吃一惊

avatar
G*G
17
不知道。按道理
0.05*10=0.5仍然是浮点数

【在 K****n 的大作中提到】
: 果然如此啊! 今次又学到了数值计算的要领 machine epsilon
: echo ""|awk '{if(0.10+0.05 > 0.15){print "wtf"}}'
: wtf
: python -c "print 0.15+0.05 > 0.15"
: True
: 不过这是为什么?
: python -c "print (0.10*10+0.05*10 == 0.15*10)"
: True
: echo ""|awk '{if(0.10*10+0.05*10 == 0.15*10){print "wtf"}}'
: wtf

avatar
G*G
18
excel里面的round,就不是round to even.
在excel里面如果不用roudup和rounddown,直接用round的话
round(2.5,0)=3
round(3.5,0)=4

【在 s******s 的大作中提到】
: come on.
: 不懂就去google 一下。大多数科学计算都是round to even, 或者类似的。
: 你小学学的最简单的round有一个重大的问题,就是正负数round有bias。

avatar
e*o
19
精确到一定的位数。不是都不准,也不是都准,所以不要比较浮点数。非得比较艳阳天
的答案靠谱,具体我记不到了。
给你说的matlab讲数值计算的书看了么?专门有一节讲这个。
比如,打开browwer console
0.1 + 0.2 === 0.3
> false
0.05 + 0.25 === 0.3
>true

【在 G***G 的大作中提到】
: 不知道。按道理
: 0.05*10=0.5仍然是浮点数

avatar
x*4
20
这两种都不是bug。不懂的不要急着骂人,Google一下就明白了

【在 G***G 的大作中提到】
: round(2.5)
: 2
: round(3.5)
: 4
: (0.1+0.05)>0.15
: it gives you the answer 'TRUE'.

avatar
d*k
21
mark一下,准备开始用R的人
avatar
w*i
22
你这人真有趣,在钓鱼版练习英语作诗,在生物版问编程,
问的都是随便google一下就有答案的问题,是特别需要他人的关注,还是心理上没断奶?

【在 G***G 的大作中提到】
: round(2.5)
: 2
: round(3.5)
: 4
: (0.1+0.05)>0.15
: it gives you the answer 'TRUE'.

相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。