这个神秘的数,让芯片巨头因特尔赔了5亿美金

这个神秘的数,让芯片巨头因特尔赔了5亿美金
2019年11月10日 09:00 新浪科技-自媒体综合

  来源:把科学带回家

  编译 七君

  因特尔是世界上最大的芯片制造商之一,这个大家都知道,你的电脑用的很有可能就是因特尔的处理器。

  因特尔处理器是性能优良的代名词,但是,因特尔也有一段不堪的往事。这件事还和一个神秘的常数,以及一个困扰人类2300多年的神秘数学猜想有关。

  1994年,因特尔推出了奔腾处理器,这是当时市面上最先进的处理器之一。但是这个世界上最坚硬的盾,遇到了最锋利的矛——能逼疯计算机的数学家。

出了bug的奔腾处理器@wikipedia出了bug的奔腾处理器@wikipedia

  这不难理解,因为数学家需要处理数学问题。尤其是当他们不知道怎么证明一个猜想的时候,他们就会用暴力穷举的方法。

  在这个过程中,计算机就会被逼到绝境。每次一有先进计算机出现,数学家们就会摩拳擦掌,饿虎扑食一般把先进计算机团团围住。加拿大西蒙弗雷泽大学(Simon Fraser University)的数学家 Peter Borwein 曾经对《科学》表示,通过让计算机不断进行简单重复的计算,计算机的计算能力“就会到达崩溃的边缘”,开始出错。

  这次,奔腾也没有逃脱数学家的魔爪。把奔腾逼到崩溃DAN疼的,是一个叫做布伦常数(Brun's constant)的神秘常数。

  布伦常数和质数有关,而且表达式很简单——

  可是布伦常数是干哈用的?这里面的数字又是什么?

  这就要和把数学家们逼疯的著名猜想——孪生素数猜想讲起了。

  欧几里得在《几何原本》里已经证明存在无穷多的质数。数学家们也知道,如果从1开始一直数下去的话,一开始质数出现的频率比较高,后来就变得比较珍稀了。

  比如,两位数里有23%是质数,但是十位数里只有4%是质数,而百位数里,质数只占1%不到。

  不过,质数还有一个奇特的现象,那就是虽然质数的分布变得越来越稀疏,但是两个连续质数之间的距离却似乎不会增长,比如3和5差2,41和43也差2,101和103也差2,10007和10009也差2。

  这样相差2的一对连续质数就被叫做孪生素数,或者叫孪生质数。

100以内的质数(黄底)和孪生质数(红色)100以内的质数(黄底)和孪生质数(红色)

  2300年前,欧几里得就开始大胆脑补了,会不会孪生质数有无穷多对呢?一定是这样的。然后大家为了纪念欧几里得的脑洞,就把它叫做孪生素数猜想。

  这个猜想也变成了一座让数学家闻风丧胆的数学金杯。

  比如,在1912年的国际数学家大会(ICM)上,德国数学家 Edmund Landau 就举出了当时数学界觉得不可能解决的4个猜想,其中之一就是孪生素数猜想。这4个问题后来就被叫做兰道问题。

  100多年后的今天,这4个兰道问题还是猜想。

挪威数学家 Viggo Brun@wikipedia挪威数学家 Viggo Brun@wikipedia

  不过在1919年,挪威数学家 Viggo Brun 有了个大突破。Brun 证明,就算有无穷多对孪生质数,它们的倒数的和,会收敛于一个有限的值。

  这个常数,就被叫做布伦常数。

布伦常数收敛于一个有限值@wikipedia布伦常数收敛于一个有限值@wikipedia

  其实,布伦常数对于数学家们来说是一个精神打击。因为如果 Brun 证明孪生素数的倒数和不收敛,是发散的,这就等于宣布,孪生素数有无穷多对,那么孪生素数猜想就得到了证明,欧几里得挖的坑就可以填上了。

  而存在布伦常数,等于说孪生素数问题还是没有得到证明,只不过现在大家知道孪生素数的分布确实很稀疏,但我们还是不知道孪生素数是不是有无穷多对。

  另外,虽然 Brun 能证明布伦常数存在,但并不能计算出它的每一位,就像我们还无法计算π的小数点后的每一位数字一样。不过和π不一样,我们直到现在也不知道布伦常数是不是无理数。如果能多算出几位它小数点后的数字,我们或许就能了解它到底是什么品种的妖怪了,因此许许多多的数学家开始计算布伦常数。

  随着计算机的出现,数学家们想到了用暴力硬算的方法解决这个问题。

  1974年,为美国海军干活的两个数学家 Daniel Shanks 和 John Wrench Jr 报告了用计算机暴力算出来的布伦常数,他们让悲催的计算机穷举了2百万个质数。

  2年后,澳大利亚国立大学的数学家 Richard Brent 更加暴力,他让计算机穷举了224 376 048对孪生质数,利用这些质数,他算到布伦常数的小数点后第8位,得到1.90216054。

  数学家们看到 Brent 这种勇士,好长一段时间都不说话了,因此布伦常数的故事就风平浪静了一大会儿。接着到了90年代,因特尔就推出了最强处理器。

  美国弗吉尼亚州的林奇堡学院(Lynchburg College)的数学家Thomas Nicely看到因特尔处理器很心动,他早就想算一把布伦常数了,毕竟当时也没有矿币可以挖。

  他打算磨死计算机,让它算到万亿。

  因为知道数学家都是计算机杀手,为了确保计算机不会崩溃搞事情,他还用了双保险——用2种方法计算。

  这俩方法的差异差不多等同于,算1/3+1/7的时候,用0.33+0.14=0.47这个方法,或者1/3 + 1/7 = 10/21 = 0.48这个方法。照理来说算出来的结果差距应该不大。

  但是呢,Nicely 用这两个方法得到的结果一比之后,却发现差距比欧几里得的脑洞还大。

  用排除法一波debug以后,Nicely 发现问题的关键在于2个质数,那就是824 633 702 441和824 63 702 443,它们的倒数的小数点后的第10位被算错了。

  但是,Nicely 不确定这个问题是计算机硬件的问题,还是软件的问题,总之不是他的问题。于是他让因特尔古早处理器486又算了一次,结果486倒是算对了。

  4个月后,Nicely 又用其他两台装有奔腾的计算机做了一次计算,这个问题又出现了。

  很明显,这是因特尔奔腾的硬件有毛病。Nicely 估计,这个处理器大概会把10亿个倒数里的1个算错。因为要算布伦常数,计算机就要计算数十亿的倒数,因此出错在所难免。

  Nicely 很快联系了因特尔,要求一起写数论作业看看是怎么回事,不过因特尔并没有接受他的请求。

  Nicely 觉得很无语,于是就在11月把这件事的前因后果写了邮件,群发给了小伙伴们。

  这件事很快就被美国有线电视新闻网(CNN)等媒体报道。奔腾算倒数时会偶发智障的事件被公开后,因特尔就不得不召回旧的处理器并为用户更换新的。

  后来因特尔承认,其实他们在生产奔腾的时候就知道这个问题了,但是计算了一波后他们发现,90亿用户里,只有1个会受到影响,因此一开始没有召回。

  当时因特尔已经卖掉了一百多万台装有奔腾处理器的计算机,所以1995年1月17日,因特尔宣布,因为这次召回事件,他们损失了4.75亿美金(相当于现在的8.23亿美金,58亿人民币)。

  这个问题,史称奔腾浮点除错误(Pentium FDIV bug),被写入了维基词条,是因特尔最想让大家遗忘的黑历史之一。

  那么,为什么奔腾奔腾会算错呢?问题出在它做除法的时候。

  原来,因特尔做了一个查找表,也即是类似于三角函数表这样的方便计算的表格,这样不用每次都亲自算一遍,查一下表格可能会更方便。但是这个查找表漏了5个数据,导致做除法的时候有一定的几率犯错。

  瑞士洛桑联邦理工学院加密算法实验室的教授 Arjen Lenstra 还给因特尔补了一刀:“我们数学家早就知道数论对计算很有用啦。在卖处理器之前好好算一下数论的东西嘛真是的。”

  对了,后来在2002年,不隶属于任何已知大学或组织的法国浪人数学家 Pascal Sebah 又更新了布伦常数——1.902160583104。

  而在2013年,孪生素数猜想也有了一个大突破——华人数学家张益唐在58岁时发表关于孪生素数猜想的重要论文,证明了相差小于7000万的素数对有无穷多对。

张益唐张益唐
数学家数论
新浪科技公众号
新浪科技公众号

“掌”握科技鲜闻 (微信搜索techsina或扫描左侧二维码关注)

创事记

科学探索

科学大家

苹果汇

众测

专题

官方微博

新浪科技 新浪数码 新浪手机 科学探索 苹果汇 新浪众测

公众号

新浪科技

新浪科技为你带来最新鲜的科技资讯

苹果汇

苹果汇为你带来最新鲜的苹果产品新闻

新浪众测

新酷产品第一时间免费试玩

新浪探索

提供最新的科学家新闻,精彩的震撼图片