[请益] 如何直接判断浮点数运算时有误差(赠P币)

楼主: baobao566 (宝宝)   2018-11-30 19:55:06
技艺竞赛剩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

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)
作者: eva19452002 (^^)   2018-12-01 00:45:00
都说竞赛了还上来问人?
作者: x246libra (楓)   2018-12-01 06:45:00
这算事前准备吧,他也找过资料,不用这么不耐烦吧楼上个人也挺好奇,这种计算有规则可循?不然怎么肯定两题的答案不同
作者: UnReal5566 (匪莪伊蒿)   2018-12-01 10:04:00
你是在问这个吗 https://youtu.be/CiKUMWu7AmU
作者: longlongint (华哥尔)   2018-12-01 13:27:00
若没办法用1/2^n 和表示先猜不相等吧做完考卷再回来算(误IEEE754如果你手算够快也可以先算有误差的状况下相等也是赛到的而已 一般会假设不相等
作者: alan23273850   2018-12-01 13:33:00
只能照算,别无他法不过我总觉得相等跟不相等的机率各占一半
作者: danielu0601 (黒猫.俺の嫁)   2018-12-01 16:01:00
是不是round到最后一位是0
作者: CorkiN (柯基)   2018-12-01 16:37:00
在guard跟round bit为10的条件下,看LSB为1就进入,为0就舍去
作者: turkeyonly (逼逼)   2018-12-01 20:21:00
推个

Links booklink

Contact Us: admin [ a t ] ucptt.com