G***G 发帖数: 16778 | 1 round(2.5)
2
round(3.5)
4
(0.1+0.05)>0.15
it gives you the answer 'TRUE'. |
c****u 发帖数: 584 | |
G***G 发帖数: 16778 | 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吧。
|
D*a 发帖数: 6830 | 4 是因为数字存储方式吧
> (0.1+0.05) - 0.15
[1] 2.775558e-17 |
e*******o 发帖数: 4654 | 5 Re
lz 整天提些稀奇古怪的问题
不过 几年之后肯定比整天做实验好
【在 D*a 的大作中提到】 : 是因为数字存储方式吧 : > (0.1+0.05) - 0.15 : [1] 2.775558e-17
|
s******s 发帖数: 13035 | 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'.
|
G***G 发帖数: 16778 | 7 Who uses 'round to even'?
I don't think the first one is good one.
【在 s******s 的大作中提到】 : 第一个完全正确啊,怎么叫bug? : 第二个没办法,也算是bug把。不过人家数据这样存的,你一定要用 : 完美的小数点以后的比较方法,也不是不可以。
|
s******s 发帖数: 13035 | 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.
|
K****n 发帖数: 5970 | 9 其实小学学的round 2.5和4.5 应该round到几?是传说中的四舍五入么?
【在 s******s 的大作中提到】 : come on. : 不懂就去google 一下。大多数科学计算都是round to even, 或者类似的。 : 你小学学的最简单的round有一个重大的问题,就是正负数round有bias。
|
K****n 发帖数: 5970 | 10 无论如何,(0.1+0.05)>0.15 是处这一点还是很令人震惊的
这泥马还玩儿不玩儿了。以前不知道,原来R君是这样的人啊。太过分了! |
|
|
s******y 发帖数: 28562 | 11 呵呵,好像以前我们学编程的时候就说过这种事情,要比较两个浮点数 a>b 的时候最
保险的方法是检查 (a-b) > zero, 然后把zero 定义成一个该系统里最小的数字。
【在 K****n 的大作中提到】 : 无论如何,(0.1+0.05)>0.15 是处这一点还是很令人震惊的 : 这泥马还玩儿不玩儿了。以前不知道,原来R君是这样的人啊。太过分了!
|
s******s 发帖数: 13035 | 12 小学最早就是四舍五入啊,教的多点的会让你到偶数
【在 K****n 的大作中提到】 : 其实小学学的round 2.5和4.5 应该round到几?是传说中的四舍五入么?
|
s******s 发帖数: 13035 | 13 这个很正常啊。大多数程序都是这样的,除非你调用特别的方法。
浮点数二进制当然不是正好的,不仅是R,你试一下最基本的bash awk
也一样,不值得大吃一惊
【在 K****n 的大作中提到】 : 无论如何,(0.1+0.05)>0.15 是处这一点还是很令人震惊的 : 这泥马还玩儿不玩儿了。以前不知道,原来R君是这样的人啊。太过分了!
|
a*******a 发帖数: 4233 | 14 不要随意比较两个浮点数,浮点数是有误差的
【在 G***G 的大作中提到】 : round(2.5) : 2 : round(3.5) : 4 : (0.1+0.05)>0.15 : it gives you the answer 'TRUE'.
|
j*********e 发帖数: 15 | 15 你学一下system programming (用C) 就知道怎么回事了。所有language都这样。计
算机是二进制的,都是非连续的。
有些语言用class来存储大的数字,貌似PL-SQL就有。
最后还是看你对精度的要求,要求高的话就不要用float和double. |
K****n 发帖数: 5970 | 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 : 也一样,不值得大吃一惊
|
G***G 发帖数: 16778 | 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
|
G***G 发帖数: 16778 | 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。
|
e*******o 发帖数: 4654 | 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仍然是浮点数
|
x***4 发帖数: 1815 | 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'.
|
d****k 发帖数: 2738 | |
w****i 发帖数: 964 | 22 你这人真有趣,在钓鱼版练习英语作诗,在生物版问编程,
问的都是随便google一下就有答案的问题,是特别需要他人的关注,还是心理上没断奶?
【在 G***G 的大作中提到】 : round(2.5) : 2 : round(3.5) : 4 : (0.1+0.05)>0.15 : it gives you the answer 'TRUE'.
|