Wednesday, September 26, 2007

[转]Excel和你说65535其实等于100000

Google Group里一个以微软Office Excel为主题的新闻组里有人报告说,Excel 2007里存在一个重大bug,会将850*77.1错误地计算为100000,而不是65535.出现这么低级的bug,微软工作人员开发和审核的不严谨是很显然的,至少可以说是百密一疏,尤其是旧版产品反而没有问题,无疑会让微软更加尴尬.

850*77.1并不是一个特例,不信你可以在Excel 2007里计算下边这些乘法:(转帖者注:直接复制公式并粘贴到Excel中)
=5.1*12850
=10.2*6425
=20.4*3212.5
=40.8*1606.25
=154.2*425
=212.5*308.4
=308.4*212.5
=425*154.2
结果都是100000吧?这个看起来有些不可思议的问题很快得到了多名专家的确认,Excel MVP Bernad Leingme更是第一个站了出来.

事 实上,问题出现在65535这个数字上.虽然现在还没能最终肯定到底是什么原因,但考虑到65535这个数字的特殊性(转换成二进制就是 1111111111111111)(转帖者注:这个数是无符号16位整数之最大值,但是其浮点表示形式并没有如此特殊),初步怀疑Excel 2007在浮点计算或者舍入误差方面出现了失误.另外还可以看出,出错的乘法公式中至少有一个数字带有一位小数.更进一步地,如果把上述乘法之一放在A1 单元格里,然后A1+1就会返回100001,A1*1返回100000,A1/1返回100000.这些无疑都是错误的,因为Excel 2007已经把A1的值当成了100000,不过奇怪的是A1*2返回的却是正确的131070,A1-1也是65534没错,A1/2也准确得到了 32767.5.Excel 2007如此反复无常的确令人难以琢磨.
(转帖者的分析:进过网友的上述试验,我觉得可能是微软在处理数据类型转换的时候出了错误.结果来看这个应该是浮点处理问题,因为只有包含小数而且做乘除发才有这个Bug.乘除1的问题应该是Excel做了快速处理,不能说明公式的原值就是100000)
不过本人计算机基本原理没学好,忘了浮点数怎么算了,没法再深究下去)

Office 2000/XP/2003等旧版本都不存在这个bug,看来只是Office 2007的新“专利”了.

来源:mydrivers (http://news.mydrivers.com/1/91/91929.htm)

0 comments:

Subscription

Enter your email address:

Delivered by FeedBurner

Subscribe with Google Subscribe with My Yahoo!Subscribe with NewsGatorSubscribe with My AOLSubscribe with RojoSubscribe with BloglinesSubscribe with NetvibesSubscribe with PageflakesSubscribe with Live.com