工程师别惹怒数学家!25年前,“布朗常数”让英特尔惨赔

有一种人,工程师绝对惹不起,那就是“数学家”;25年前(1994年),有个热血的数学家,用英特尔的处理器计算布朗常数,意外发现处理器的bug,让英特尔赔了4.75亿美金,换算成新台币的话,大概是145亿。

一个数学家的研究就让科技巨头惨赔145亿,真的是太疯狂了!而且它还成了程序界的专有名词“Pentium FDIV bug”。在带你看这个故事前,先帮你科普:什么是布朗常数?

布朗常数:孪生质数的倒数和,会趋近于一个常数

早在希腊时代,欧几里得就已经证明质数有无限多个;后代的数学家也发现,从1开始算,数字愈大,质数分布得愈稀疏;但很奇特的是,尽管分布得再稀疏,但只要出现一个质数,就可以在它附近找到另一个质数,例如41和43、101和103、10007和10009,他们之间都相差2。

数学家将相差2的连续质数称为“孪生质数”。

到了1919年,挪威数学家布朗(Viggo Brun)证明,所有孪生质数的倒数和会收敛于一个常数。这个数称为布朗常数(Brun’s constant):

但布朗常数还有问题,就是数学家无法证明它是不是无理数,因为数学家无法证明孪生质数的数量是有限还是无限的。孪生质数的数量问题早已困扰数学家上千年,被称为“孪生质数猜想”,是数学界的经典难题。

然而计算机出现之后,数学家就可以采用“暴力法”,用计算机硬算布朗常数,试图解决孪生质数猜想难题。(只不过到现在也还是没有解决)

数学家用英特尔的处理器计算布朗常数,意外发现bug

就在1994年,英特尔推出了Pentium处理器,这是当时最先进的处理器之一,当然就有热血的数学家,使用Pentium处理器疯狂计算布朗常数。

那个热血的数学家是Thomas Nicely,是美国Lynchburg College的教授。

为了降低算错的风险,Nicely同时使用两种方式计算布朗常数,若算出来的答案不同,很可能就是设备有问题。而实际计算之后,Nicely发现两种方式算出来的布朗常数真的差很多。

debug之后,Nicely发现问题出在计算机把这两个数字:824,633,702,441和824,633,702,443的倒数的小数点后第10位算错了。

为了确认这个问题是出在硬件还是软件,Nicely用英特尔的旧版处理器486计算,发现486算出来的数字是对的;几个月后,Nicely用Pentium重新计算,同样的问题又出现了。也就是说,问题出在Pentium处理器。

英特尔召回Pentium处理器,损失高达145亿台币

Nicely估算,Pentium大概会把10亿个倒数里的1个算错,而要计算布朗常数,的确会算超过10个倒数,所以难免出错。但Nicely联系英特尔,告知Pentium处理器的问题,却遭到冷淡的对待。

于是Nicely就写信,将这件事告诉他的朋友,接着就被CNN等各大媒体报道,英特尔不得不将市场上的Pentium处理器召回。当时英特尔已经销售超过100万台装有Pentium处理器的计算机,因为召回,英特尔损失了4.75亿美金。

后来英特尔承认,生产Pentium的时候就已经发现问题了,但英特尔认为90亿个用户只会有1个受影响,所以没有召回。这个问题后来被称为Pentium FDIV bug,是程序界著名的bug,也是英特尔不堪的一段黑历史。

一道上千年的数学难题,一个试图解题的数学家,让一个科技巨头惨赔145亿台币。但真正让英特尔惨赔的,不是数学难题,也不是数学家,而是他们面对问题的态度。世界上本来就没有完美的程序与芯片,但用户热心指出错误,厂商是否有意愿倾听改正?

当时英特尔不愿意听,不只损失145亿元,还在程序界留下了臭名:Pentium FDIV bug。这个名词,会在教科书里名留千史。