作者baobao566 (宝宝)
看板Soft_Job
标题[请益] 如何直接判断浮点数运算时有误差(赠P币)
时间Fri Nov 30 19:55:06 2018
技艺竞赛剩3天,太晚上来问了...能解决问题者赠上全部家产税前350P。
为了这个问题困扰了许久,不断地查资料,查完这个观念,又看到新
的名词与此题有关联。以我查到的资料VB.Net在浮点数运算时会将数
字以IEEE754来标准来做,预设的浮点数型态是Double,所以是64位,
有误差是因为将他转成2进制,小数部分如果无限循环,取到53位往最
靠近的舍入(Round to nearest),二进制的这个模式我不太懂意思,
翻资料查到的大概又都是英文...,以我理解的英文意思是说如果小数
部分大於一半就往上进,小於一半就往下舍吗?那这样53位判断大小要
算到什麽时候...。
还有一些环境的因素,我看到一个文件上面说编译器可能会帮你最佳化
运算式,例如说x = a+b-a -> x = b,那这题有很多环境的问题,是要
怎麽确定这个答案是唯一的呢?此题是今年高职技艺竞赛的程式设计赛前
模拟学科试题,有想过他可能只是出经典范例来考你知不知道浮点数有
误差,如果只是这样就太好了,但是如果不是还是有个准确判断的方法
比较保险。
(出处:
https://goo.gl/oAzyNB Compiler Optimization)
如果判断此题需要手算,请问有无快速纸笔手算判断的方法?
下面图两题答案分别为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/Soft_Job/M.1543578908.A.B61.html
1F:→ eva19452002: 都说竞赛了还上来问人? 12/01 00:45
2F:推 x246libra: 这算事前准备吧,他也找过资料,不用这麽不耐烦吧楼上 12/01 06:45
3F:推 x246libra: 个人也挺好奇,这种计算有规则可循?不然怎麽肯定两题 12/01 06:48
4F:→ x246libra: 的答案不同 12/01 06:48
对
我已经知道小数有误差的观念了,这部影片并没有没有看到计算误差有无相等的方法。
6F:推 longlongint: 若没办法用1/2^n 和表示先猜不相等吧 12/01 13:27
7F:→ longlongint: 做完考卷再回来算(误 12/01 13:28
8F:推 longlongint: IEEE754如果你手算够快也可以先算 12/01 13:30
9F:→ longlongint: 有误差的状况下相等也是赛到的而已 一般会假设不相等 12/01 13:33
IEEE754怎麽算..不懂Round to nearest的规则,还是他就是0舍1入。
10F:推 alan23273850: 只能照算,别无他法 12/01 13:33
11F:→ alan23273850: 不过我总觉得相等跟不相等的机率各占一半 12/01 13:35
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:17:27
12F:→ danielu0601: 是不是round到最後一位是0 12/01 16:01
应该不是
→ x000032001: 要被舍去的数值是100...时 舍去後让他变成偶数 12/01 16:31
13F:推 CorkiN: 在guard跟round bit为10的条件下,看LSB为1就进入,为0就 12/01 16:37
14F:→ CorkiN: 舍去 12/01 16:37
感谢大神丢关键字,往正确的方向查到了,简单来说进位的状况有
1. 53位为1,54位後(含)有任一数字为1。
2. 52位为1,53位为1,54位後(含)都为0,像偶数舍入,进位。
感谢!把舍入的部分弄厘清後,可以来运算误差的部分了~
请您待我解决问题後再献上P币。
网路上资料:
https://goo.gl/j8ikqu
※ 编辑: baobao566 (163.19.240.54), 12/01/2018 18:04:11
※ 编辑: baobao566 (163.19.240.54), 12/01/2018 18:12:48
15F:推 turkeyonly: 推个 12/01 20:21