作者LPH66 (凉宫春日症候群)
看板Visual_Basic
标题Re: [VB6 ] 其实是很新手的问题....
时间Sun Nov 12 04:09:23 2006
※ 引述《A1pha ([αλφα])》之铭言:
: : 推 LPH66:浮点数精确度 11/11 20:18
: : 推 fumizuki:所有电脑共同的精确度问题 11/11 20:51
: : → fumizuki:务必要限制小数点第几位...Round(X, 2) 11/11 20:52
: 为什麽会有这样的问题啊?
: 精确度问提是指说电脑也是会有「误差」的吗?
: 像是人用一把尺画三公分的线,永远不会是准的3公分这样?
: 还有,为什麽同样是运算,
: Val(txt_percentage)/100印出来就会是3/100=0.03
: 而不是0.03000000745058之类的?
: 感谢解答<(_ _)>
就说1/3好了
我们用十进位来算是会变成0.333333333333....的小数
那如果我们的表现空间是有限的 势必要在某地方截掉
於是就变成0.3333333333
如果我们之後拿它去乘上6 就变成1.9999999998 不是2耶!
再抓一个: 2/3 在一样的地方切掉 变成0.6666666667 (四舍五入)
之後拿它去乘上3 就变成2.0000000001 也不是2耶!
这就叫浮点数精确度误差
有的时候这误差小 印不到那麽多精确度时就会忽略
例如上面的例子我们如果只取小数3位 那都是会变成2.000的
但有时运算多次之後使得误差变大了 就会显示出来
例如我们拿第二个数去乘以自己5次再乘以3六次 理论上要变成2^6=64 但实际上:
0.6666666667
0.4444444445 一次
0.2962962963 二次
0.1975308642 三次
0.1316872428 四次
0.0877914952 五次
0.2633825856 一次
0.7901477568 二次
2.3704432704 三次
7.1113298112 四次
21.3339894336 五次
64.0019683008 六次
取(显示)到小数第3位 变成64.002了!
运算一多误差扩大就会这样
---
以上是在十进位下的类比
电脑内部是用二进位存的
所以就会有像0.2这样的十进位有限小数在二进位也必须近似表示
(0.2的二进位:0.0011001100110011........)
不过道理是类似的
--
実琴:「
河野!你真的就这样被
物质慾望给吸引过去了吗?!」
亨:「只要
穿着女装摆出亲切的样子,所有必要花费就能
全免,似乎一点都不坏啊。」
実琴:「难道你没有
男人的尊严了吗?!」
亨:(断然道)「
没有。在
节衣缩食且
生活吃紧的
学生面前,
没有那种东西。」
--プリンセス・プリンセス 第二话
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 192.192.197.115
1F:推 A1pha:喔喔!!!感谢!!! 非常清楚~~我了解了!!<(_ _)> 11/12 04:13