今天在DRL上有人在讨论今天出现在Digg上的一个话题,首发在微软Excel新闻组中,被发到了cnBeta上: 主要说的就是在Excel 2007中如果输入标题中的算式,得出的得数不是65535,而是100000。原帖是英文,地址在这里。 除了这个第一个被发现的算式之外,很快有人发现了更多: =5.1*12850 =10.2*6425 =20.4*3212.5 =40.8*1606.25 =77.1*850 =154.2*425 =212.5*308.4 =308.4*212.5 =425*154.2 ..etc 感觉小学时候的数字敏感又出现了,总结了下,假设了几条规律,然后自己推翻了其中好几条,只有一条暂时没办法自己推翻掉: 乘数中必定有一个乘数包含一个17的因数。即:抛开小数点的后置限制,出现问题的情况下乘数中必定有一个能够被17整除。 上面这个假设暂时没找到例子推翻,同时有2个进一步的假设结论: 1.包含17这个因数的乘数(如是小数先当成整数计算)应该由17和至少一个比2大的质数构成。及最小满足此现象的数组合是5.1×12850。 2.乘数中至少要有一个小数的末位不为5(或0,因为小数在肉眼中看不到0的存在!)才能出现此现象 联想猜测: 根据http://sucirst.spaces.live.com/blog/cns!39F32C4E23C93E00!3694.entry 我这篇里写过的,Office 2007之前的版本支持最大的数据处理量是2的16次方。(比17小1)Excel 2007支持的是2的20次方。 不知道这个bug最后会如何解决,呵呵 2007-9-26 晚上最后总结: Sucirst Yie says, in 9-26-2007 @ 23:21:37 edit 仔细总结一下,似乎现在有3条假设一定要成立才行: 1.必定至少有一个乘数是小数 2.把所有乘数先当作整数处理,则必定有一个乘数能被17整除且该乘数做整数看一定大于等于51。(即X>17×2) 3.至少要有一个为小数的乘数,尾数不能为5. 2007-9-27: 昨天晚上新闻组中已经有朋友提醒我 微软做出了官方说明。 今天的后续讨论很热烈,尤其值得一提的是 Joel的详细解释。 读了上述解释,我也可以明白了。问题关键是出在小数在内存中的存储上。在0.1~0.9中,只有0.5是正常的,别的都有可能触发接近(而非 就是)65535(或65536)这个结果产生问题。 也就是说我昨天观察得到的假设中,0.5这一条是最重要的,因为65535可以被17整除,如果0.5成为唯一的限定条件,就不难解释为什么必定存在一个乘数可以被17整除了! 这件事情应该很快就会随着新的补丁放出而逐渐结束。就像一个程序员的回复“这只不过是个“bug”,不是个“elephant””。呵呵。短短几十个小时,互联网上的讨论似乎更多有变成一种公关危机的趋势。这种错误的可能性只有百万分之一还不到,但是已经很多人开始质疑Excel的统计功能权威性了,希望微软能处理好这次事件。 btw,由于这2天参与这个问题的讨论,今天到现在好像至少有超过14个国家,60个城市的读者访问了这篇文章。可惜我是用中文写的,看不明白的朋友只能说抱歉了。^_^


