作者baobao566 (宝宝)
看板Prob_Solve
标题[问题] 如何直接判断浮点数运算时的误差(赠P币)
时间Thu Nov 29 08:14:59 2018
为了这个问题困扰了许久,不断地查资料,查完这个观念,又看到新的名词与此题
有关联。以我查到的资料VB.Net在浮点数运算时会将数字以IEEE754来标准来做,预设的
浮点数型态是Double,所以是64位,有误差是因为将他转成2进制,小数部分如果无限
循环,取到53位往最靠近的舍入(Round to nearest),二进制的这个模式我不太懂,
翻资料查到的大概又都是英文...。
还有一些环境的因素,我看到一个文件上面说编译器可能会帮你最佳化运算式,
例如说x = a+b-a -> x = b,那这题有很多环境的问题,我要如何判断呢?
(出处:
https://goo.gl/oAzyNB Compiler Optimization)
如果判断此题需要手算,请问有无快速手算判断的方法?此题是今年高职技艺竞
赛的程式设计赛前模拟学科试题,有想过他可能只是出经典范例来考你知不知道浮点
数有误差,如果只是这样就太好了,但是以防万一还是有个准确判断的方法比较安心。
----更新----
没什麽人解答,如果能解决问题者,赠上全部家产税前350P
下面图两题答案分别为C、D
https://imgur.com/a/zBQ9pjH
22. 执行下列 Visual Basic 程式片段,输出结果为何? (A) 1 (B) 0 (C) True (D)
False Console.WriteLine(1.1 + 1.2 = 2.3)
23. 执行下列 Visual Basic 程式片段,输出结果为何? (A) 1 (B) 0 (C) True (D)
False Console.WriteLine(0.3 - 0.2 = 0.1)
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 163.19.240.54
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Prob_Solve/M.1543450501.A.83F.html
※ 编辑: baobao566 (163.19.240.54), 11/30/2018 07:51:22
※ 编辑: baobao566 (163.19.240.54), 11/30/2018 07:51:49
1F:推 alan23273850: 所以原 PO 有按照 IEEE 标准先跑过一遍吗 11/30 16:31
模拟浮点数格式化吗?在53位要如何舍入时就不会了..
去查了资料他说往最靠近的数字进位,这个我不懂,查到都是英文的资料,我勉强读
他的意思是说如果小数部分大於一半就往上进,小於一半就往下舍吗?那这样53位要算
到什麽时候...
技艺竞赛剩3天了..太晚上来问了...
※ 编辑: baobao566 (163.19.240.54), 11/30/2018 19:44:14
2F:推 alan23273850: 就是0舍1入,看下面一位 12/01 13:30
3F:→ alan23273850: 有线上模拟器可以算吧 12/01 13:30
https://goo.gl/PP2ooo 我在这边推出VB.Net的误差值和这边计算机的
Round to nearest even是一样的。
https://goo.gl/3t76eW Round to nearest even这边有说明,能帮忙解释英文的意
思吗? 为什麽10.10100舍入是10.10,10.11100舍入是11.00
※ 编辑: baobao566 (163.19.240.54), 12/01/2018 15:32:42
4F:推 suhorng: Round to nearest even 要让舍去或 *进位* 後是偶数 12/02 01:23
5F:→ suhorng: XXXXXX11 => 进位 XXXXXX01 => 舍去 12/02 01:24
6F:→ suhorng: 不只二进位有这样, 十进位也有 "四舍六入五成双" 12/02 01:26