Deepin 开发的计算器犯了一个初做计算器容易犯的错误
Tofloor
poster avatar
ih******op@vip.qq.com
deepin
2017-12-02 07:54
Author
本帖最后由 ihipop 于 2017-12-11 18:32 编辑



自己瞅瞅吧。

这个错误,苹果也犯过。右边的是Gnome自带的的有经验的人开发的计算器

整个过程是连续输入 不是复制粘贴的结果计算的。

这样会导致小数计算累加后多次出现误差叠加。

计算器就是得做好精度处理。


日期:2017-12-11
今天官方推送更新修复了,赞一个~
Reply Favorite View the author
All Replies
1 / 2
To page
avatar
130******12
deepin
2017-12-02 08:18
#1
有什么问题吗,表示没有搞清楚。可能是无理数的关系吧!
Reply View the author
Comments
snowdax
2017-12-02 18:14
能用分数表示的数是有理数,和无理数没什么关系的
avatar
duanyao
deepin
2017-12-02 08:21
#2
无限精度计算吗?
Reply View the author
avatar
159******79
deepin
2017-12-02 08:32
#3
精度问题
Reply View the author
avatar
ih******op@vip.qq.com
deepin
2017-12-02 08:53
#4

就是精度问题 解决起来很简单确又不简单
Reply View the author
avatar
jiangzm
deepin
2017-12-02 17:08
#5
这是错误还是无理取闹?
Reply View the author
avatar
He8617439
deepin
2017-12-02 17:24
#6
https://bbs.deepin.org/post/149404
这是错误还是无理取闹?

不算错误,没考虑人类操作习惯。
Reply View the author
avatar
chenhui7373
deepin
2017-12-02 17:30
#7
如果是java,用字符串可破精度。
Reply View the author
avatar
blue
deepin
2017-12-02 17:52
#8
有不让人说的感觉
Reply View the author
avatar
ih******op@vip.qq.com
deepin
2017-12-02 18:49
#9
https://bbs.deepin.org/post/149404
这个问题,首先有个精度问题,乘除法都有这个问题,但除法更很多时候除不尽,更容易遇到精度问题。

1024÷ ...

1024÷888×888 两者都没问题 因为内部的浮点计算直接把精度损失掠掉了
Deepin是在第二次乘以888的时候,被乘数使用了丢失精度后的浮点数,没处理好精度

×888 不是无理取闹,因为我下次可能乘除其他小数,多次乘除会引起精度损失。

市面上大多数合格的实体计算器 都能处理好这个问题
Reply View the author
avatar
iminto
deepin
2017-12-02 20:25
#10
这不是错误,就是符合IEEE 754 标准的,程序员都知道
https://baike.baidu.com/item/IEEE%20754/3869922?fr=aladdin
Reply View the author
avatar
ih******op@vip.qq.com
deepin
2017-12-02 20:29
#11
https://bbs.deepin.org/post/149404
这不是错误,就是符合IEEE 754 标准的,程序员都知道
https://baike.baidu.com/item/IEEE%20754/3869922?fr=a ...

你做的是计算器,不是浮点数运算器
Reply View the author
avatar
iminto
deepin
2017-12-02 20:43
#12
https://bbs.deepin.org/post/149404
你做的是计算器,不是浮点数运算器

你使用了浮点数参与运算,就得按浮点数标准来.
Reply View the author
avatar
billy123456
deepin
2017-12-02 20:44
#13
https://bbs.deepin.org/post/149404
这是错误还是无理取闹?

最好搞分数计算,小数很多精度问题
Reply View the author
avatar
ih******op@vip.qq.com
deepin
2017-12-02 21:00
#14
本帖最后由 ihipop 于 2017-12-2 13:01 编辑
https://bbs.deepin.org/post/149404
你使用了浮点数参与运算,就得按浮点数标准来.

我只知道2个事实
1. 市面上大部分合格的实体计算器都能处理好这个问题
2. Gnome上的计算器正常处理了这个问题(非一次性的分步连续输入
3. 我掌握的计算机知识告诉我,这问题并不是不能解决解决。
Reply View the author
avatar
ih******op@vip.qq.com
deepin
2017-12-02 21:09
#15



小米曾经也有这个问题 反馈后 修改成和实体计算器一样的行为了。

因为你小贩做生意的时候 加减乘除肯定有多次小数计算,最后就会多次叠加误差,

显示的值是损失精度以后的值,连续输入不能拿显示的值去乘以乘数。

Reply View the author
avatar
kingskill
deepin
2017-12-02 21:14
#16
其实就是人类实际使用习惯和自然数学逻辑之间的差别。

要在人类社会中实际使用的时候,当然必须照顾前者。
Reply View the author
avatar
sz******iy@vip.qq.com
deepin
2017-12-02 21:24
#17
这个只能算是细节问题,应该归类于用户体验上。无伤大雅,认真了去考究深度的小毛病绝对不少。
Reply View the author
avatar
pcatzj
deepin
2017-12-02 21:56
#18
老实说,我没看懂这个问题!
Reply View the author
avatar
ih******op@vip.qq.com
deepin
2017-12-02 22:08
#19
https://bbs.deepin.org/post/149404
老实说,我没看懂这个问题!


Reply View the author
avatar
ih******op@vip.qq.com
deepin
2017-12-02 22:10
#20
本帖最后由 ihipop 于 2017-12-2 15:59 编辑
https://bbs.deepin.org/post/149404
老实说,我没看懂这个问题!

因为深度在连续输入的情况下,拿上一个计算结果的用来显示的损失精度后的数字去乘以乘数,而不是拿内部存储的结果乘以乘数
Reply View the author
1 / 2
To page