Android L 神级 Bug

2014-11-30 19:44:51 +08:00
 razrlele
10554 次点击
所在节点    Android
26 条回复
Mutoo
2014-11-30 19:46:58 +08:00
这没有什么啦,js 里:
> 0.1+0.2
0.30000000000000004

参见 IEEEE754
ufo22940268
2014-11-30 19:49:36 +08:00
刚刚试了下,发现只有这两个数字相减才会,这是为什么呢
Automan
2014-11-30 19:55:16 +08:00
计算器居然不是高精度= =
Xhybrid
2014-11-30 20:00:38 +08:00
貌似跟计算机的存储方式有关,都是01存储的,不可能精确把
imgalaxy
2014-11-30 20:05:21 +08:00
http://tieba.baidu.com/p/1380632364
几年前都有BUG。。。。
razrlele
2014-11-30 20:06:07 +08:00
@Mutoo
刚才用代码测试了一下:
double型变量输出15位小数的结果是0.5999999999999994
float型变量输出15位小数的结果是0.599998474121094

看来这果然不是bug。。。

@Automan
这里面用的是double型变量,double型变量可以表示的数值范围是+/- 1.79769e+308,对于手机计算器一般应该是够了吧
ETiV
2014-11-30 20:07:31 +08:00
我记得刚2000年左右那会儿, 某天中午看CCTV, 里面爆了一个卡西欧计算器的BUG.

2*2*2*....*2 加 n(忘了是几次了...) 次, 最后的数是奇数.

都是整数, 也会出错.
rinehart
2014-11-30 20:09:14 +08:00
这个实现跟你的手机的厂商是否有对libm进行“优化”有关系
Automan
2014-11-30 20:11:09 +08:00
@razrlele 一般来说计算器应用在这种范围都不该用double的。。。几次计算下来就有误差了
Cee
2014-11-30 20:12:51 +08:00
不是有个笑话是什么算2500/50 按了一下没反应 结果再按一下是1么(
razrlele
2014-11-30 20:19:14 +08:00
@Cee 这两个梗不一样诶。。。٩◔̯◔۶

这个地方应该是计算机本身运算器的问题

(不过我刚才还真跑去按了按发现结果是50我安心地笑了23333
BGLL
2014-11-30 21:27:06 +08:00
里程碑的时代就发现了……
mfaner
2014-11-30 21:36:53 +08:00
简直了。Java里一个BigDecimal就能解决的事情,有这么懒吗?
kawaiiushio
2014-11-30 21:43:03 +08:00




这只是一个精度未定义的问题、、、不算bug
当然 安卓这个计算器app的制作人员也是坑爹
0x1e240
2014-11-30 21:59:41 +08:00
MIUI 没有的说
jdqingm
2014-11-30 22:03:56 +08:00
这是如何发现的bug……
kawaiiushio
2014-11-30 22:17:47 +08:00
@0x1e240 万物基于miui 不科学啊23333
lincanbin
2014-11-30 22:19:11 +08:00
旧版本安卓的计算器的确没这个问题。
计算器一般应该用大整数模拟小数进行运算的。
kmvan
2014-11-30 22:59:51 +08:00

2.3.5版也有问题
xz
2014-11-30 23:31:54 +08:00
@ETiV 2的23次方?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/150468

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX