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
2 / 2
To page
avatar
188******04
deepin
2017-12-02 22:14
#21
iminto 发表于 2017-12-2 12:43
你使用了浮点数参与运算,就得按浮点数标准来.

你就不该用浮点数参与运算。做计算器要开发自己的数据类型。(要是以后算复数,你也用浮点数解决?)
Reply View the author
avatar
pcatzj
deepin
2017-12-02 22:18
#22
https://bbs.deepin.org/post/149404
因为深度在连续输入的情况下,拿上一个计算结果的用来显示的损失精度后的数字去乘以乘数,而不是拿内部带 ...

哦哦哦,懂了,但是这个只是对逻辑理解的问题吧?
Reply View the author
Comments
ihipop
2017-12-02 23:51
不全是,表面上是,实际上还是精度问题
avatar
clangzi
deepin
2017-12-02 22:21
#23
个人认为deepin应该重视,应该和实体计算器计算结果一致。
Reply View the author
avatar
ih******op@vip.qq.com
deepin
2017-12-02 23:58
#24
https://bbs.deepin.org/post/149404
首先,无理取闹不是我说的,欢迎讨论问题。

首先这个问题还是源自算法和浮点数精度,实际上这个问题我初 ...

你看那个GIF, 连续乘除,和一次性输入一个完整的四则运算结果是完全不一样的。

你说的问题,就是基本的浮点计算问题。这个是有现成的体系和计算实践的。

做为计算器有自己的数据处理方法。
Reply View the author
avatar
shuangfeilee
deepin
2017-12-03 00:17
#25


是1024/888的结果1.153153153。然后在结果上直接乘888.直接就回去1024了。

直接手输入的1.153153153 x 888 按道理是和图二的运算一样的,但这次是1023.9999,并没回1024;

这种设计更合理。由结果除法的商直接再乘回去,就应该是被除数。



不是商直接手动输入的,乘法结果是多少就是多少。

Reply View the author
avatar
ih******op@vip.qq.com
deepin
2017-12-03 00:23
#26
https://bbs.deepin.org/post/149404
是1024/888的结果1.153153153。然后在结果上直接乘888.直接就回去1024了。

直接手输入的1.153153153 x 8 ...

对的,成熟的计算器都是这样处理的,显示出来的精度和内部存储的商数不是同一个,参与计算的也不是同一个。
Reply View the author
avatar
wtz
deepin
2017-12-03 00:29
#27
实体计算器的内存精度至少要比显示精度多一位吧。
Reply View the author
avatar
hewro
deepin
2017-12-03 23:51
#28
不是别人不愿意讨论,而是你这个标题起的就很让人尴尬,意思就是犯了这个错误就被定性成了初学者...这个定性是不是太过鲁莽,以至于让人不愿意接收你的表达呢……………………
Reply View the author
Comments
ihipop
2017-12-04 06:10
标题改成了 “Deepin 开发的计算器犯了一个初做计算器容易犯的错误”  这样可以了吧?我不是要针对什么 ,真的。
avatar
qzy513543597
deepin
2017-12-04 00:58
#29
计算器编程的时候不该将数字定义为浮点数,听了点课,就记住这个了。。。。。。
Reply View the author
avatar
emofode
deepin
2017-12-04 01:20
#30
高精度浮点运算。这个不难。
http://u.sbw.so/6Ni3x
Reply View the author
avatar
fyzz
deepin
2017-12-04 06:12
#31
看我的。。。
Reply View the author
avatar
iovxw
deepin
2017-12-05 04:16
#32
Reply View the author
Comments
ihipop
2017-12-05 22:20
代码还未看,手动先点赞:)
avatar
kppom
deepin
2017-12-05 05:28
#33

你这个计算器可真是厉害,是魅族的吗?
Reply View the author
avatar
kppom
deepin
2017-12-05 05:33
#34
最近我也打算练手搞一个文本计算器的子项目,楼主这个帖子提醒了我这个常见错误,非常感谢。
Reply View the author
avatar
impressionyang
deepin
2017-12-05 06:58
#35
本帖最后由 impression 于 2017-12-4 23:01 编辑

这不应该归结为精度的问题,应该归结为程序员的计算逻辑的问题,开发者没有把计算结果参与到下一次的运算而是使用了计算得到的显示结果作为参与下一次计算的数据,所以可以说是开发者当时没考虑到这一步画蛇添足(额。。。。貌似不能说我们可爱的deepin程序员的坏话哦--手动滑稽)的使用了显示的结果了。
Reply View the author
avatar
ih******op@vip.qq.com
deepin
2017-12-05 22:19
#36
https://bbs.deepin.org/post/149404
这不应该归结为精度的问题,应该归结为程序员的计算逻辑的问题,开发者没有把计算结果参与到下一次的运算而 ...

显示的文本,就是损失了精度的文本。
Reply View the author
avatar
impressionyang
deepin
2017-12-06 00:31
#37
https://bbs.deepin.org/post/149404
显示的文本,就是损失了精度的文本。

计算结果有有效数字位限制,只是显示的文本这样显示,其他计算器不也一样的显示么,只是参与下一次运算用的不是现实的而是上次的计算结果嘛,所以,给开发者提个建议就行了,然后把逻辑什么的讲清楚,问题不就解决了么?https://bbs.deepin.org/user/25870来看看呀
Reply View the author
avatar
ih******op@vip.qq.com
deepin
2017-12-12 02:31
#38


今天官方修复了,赞一个~
Reply View the author
2 / 2
To page