本网友在楼下转贴了萨苏先生讲的一段故事《“只会做加法不会做减法”和“只会做减法不会做加法”的计算机》,引发了一些网友的议论。其中,彭联邦和拾遗补缺两位先生似乎算是“懂行”人士,另有一位匿名人士也跟贴称颂“这才是明白人”。
比较遗憾的是,本网友发现,这两位“懂行”的“明白人”发的跟贴,有些内容相当地不靠谱。当然,也不能就说是缺乏常识,毕竟计算机知识目前还不算普及型的常识。不过,本网友觉得还是有必要说一说的。
先说重要的事情。
来看这两个跟贴:
能请你谈谈文革期间,你们厂以及你们厂科研人员的情况吗??为什么改开,国门一打开,我们看到竟然落后了那么多??[ 彭联邦 ] 于2011-10-15 17:57:21 上帖
的确,“春天”从国外引进了大规模集成电路。稍后就引进了集成块生产线。中国人就变为廉价的劳动力,民族资本就只剩“分红”的分了。[ 彭联邦 ] 于2011-10-15 18:08:00 上帖
发这种跟贴的人,显然是丝毫不了解“春天”之前的状况。
答案是:其实当时并没有落后多少。
电子计算机从诞生到“春天”,大致上经历了四代:第一代是电子管,第二代是晶体管,第三代是小规模集成电路,第四代是大规模集成电路。
第一代开始时间:国际1946年,我国1957年,落后11年;
第二代开始时间:国际1958年,我国1964年,落后8年;
第三代开始时间:国际1964年,我国1969年,落后5年;
第四代开始时间:国际1971年,我国1974年,落后3年,基本算是追平了。
随着一声春雷,“在毛主席病重期间丧心病狂地迫害毛主席”、“疯狂破坏无产阶级文化大革命”、“企图复辟资本主义”的“四人帮”被断然处置,他们支持的那些“劳民伤财”的“自主研发”也就基本停滞了。现在国内的工业化集成电路生产线都是进口的,所以也就谈不上什么落后不落后了。只要人家给,那就能够不“落后”。不给的那些呢?那就只好“落后”了。
问:为什么都是进口的?答:做出来的必须要没有缺陷,现在国内工艺已经做不到这一点了。
问:为什么做不到这一点了?答:技术这种东西,“三天不练,就成门外汉”虽然夸张了一点,但是如果三十年不练,那肯定是要成门外汉的。
再来看这个“追问”:
组装是改开年代的词汇。中国的计算机设计制造,在毛泽东时代一直到改开前,都是独立自主的自行设计自行制造的(包括用于计算机的操作系统及应用软件的设计开发都是自己的软件设计师和程序员设计调试出来的)。原子弹、导弹、卫星的发射都离不开计算机的控制,那些都是我们自己设计制造出来的。[ 老泥头 ] 于2011-10-15 15:55:26 上帖
只是属于高精尖的国家级科研项目??[ 彭联邦 ] 于2011-10-15 17:49:12 上帖
答案很简单:从第一代开始,电子计算机就是“属于高精尖的国家级科研项目”。
研制电子计算机的想法产生于第二次世界大战进行期间。当时激战正酣,占主要地位的战略武器就是飞机和大炮,研制和开发新型大炮和导弹就显得十分必要和迫切。为此美国陆军军械部在马里兰州的阿伯丁设立了“弹道研究实验室”。美国军方要求该实验室每天为陆军炮弹部队提供6张火力表以便对导弹的研制进行技术鉴定。千万别小瞧了这区区6张火力表,它们所需的工作量大得惊人!每张火力表都要计算几百条弹道。按当时的计算工具,实验室即使雇用200多名计算员加班加点工作也大约需要二个多月的时间才能算完一张火力表。
为了改变这种不利的状况,当时任职宾夕法尼亚大学莫尔电机工程学院的莫希利(John Mauchly)于1942年提出了试制第一台电子计算机的初始设想——“高速电子管计算装置的使用”,期望用电子管代替继电器以提高机器的计算速度。美国军方得知这一设想,马上拨款大力支持,成立了一个以莫希利、埃克特(Eckert)为首的研制小组开始研制工作、预算经费为15万美元,这在当时是一笔巨款。最终花掉的总经费高达48万美元,是最初预算的三倍多。要不是为了战争,谁能舍得出这么大的钱?
此后的历代电子计算机项目,也都是各国军方最积极资助的“高精尖的国家级科研项目”。为什么会这样?不用说别的:听说过“核爆炸的计算机模拟实验”吧?
任何“高精尖”项目,只要有可能用于军事,军方就是最积极的资助者,最先进的成果也总是首先用于军事,这也属于“常识”了。当然,IBM等“私人”公司是实际的研制者,但是最大的资助者是美国军方。
重要的事说完了,来说点不重要的“常识”。
来看这个跟贴:
1958年大跃进,中科院确实研制出了第一台计算机。但没法运行,因为国产电子管的平均寿命不超过5000小时,有上万个电子管,平均1小时损坏1-2个。所以必须无论好坏同时换掉。[ 拾遗补缺 ] 于2011-10-15 14:56:00 上帖
所谓“平均寿命”,其实是一个统计数据。简单地说,就是选取同一批生产出来的“国产电子管”,进行试验,测出每个的使用寿命,再来平均一下。
所谓“国产电子管的平均寿命不超过5000小时”,通常的含义就是说:平均而言,每只“国产电子管”的预期寿命大约在5000小时左右。
如果“平均1小时损坏1-2个”,那就是说:“国产电子管”的“平均寿命”其实应该是在半小时到一小时之间,或者说“平均寿命不超过1个小时”当然,不超过1小时也仍然是“不超过5000小时”,但是“平均寿命不超过5000小时”显然不会是指不到一小时。
这就出现了问题:从“国产电子管的平均寿命不超过5000小时”和“有上万个电子管”,是如何“推导”出“平均1小时损坏1-2个”的呢?
本网友估计,拾遗补缺先生是这样进行“推导”的:把“有上万个电子管”里的“一万”,除以“国产电子管的平均寿命不超过5000小时”里的“5000小时”,然后就得到了“1—2个/小时”,于是就“推导”出了“平均1小时损坏1-2个”的结论,从而得出了用这“上万个电子管”组成的计算机“没法运行”的结论。
这个“推导”的错误究竟出在哪里,本网友没有兴趣搞科普,就不说了。不过,正常人都能根据“常识”确认:这个“推导”和得到的结论都是完全错误的。
再来看一位“明白人”的跟贴:
计算机都是只做加法不做减法的。硬件电路就叫加法器。减法也是通过加法实现。电脉冲发出去(加)不可能收回来(减)。这是你自己无知。[ 拾遗补缺 ] 于2011-10-15 14:24:24 上帖
这才是明白人。( 117.136.9 11-10-15 16:11:05 ) 7字 ( 0/4/1 )
“计算机都是只做加法不做减法的”是事实,“硬件电路就叫加法器”是事实,“减法也是通过加法实现”也是事实。但是,这些事实并不构成完整的事实。
完整的事实是:计算机不仅不直接做减法,也不直接做乘法、除法、乘方、开方。
计算机的乘法运算是由两次对数运算、一次加法运算和一次指数运算构成的:先把两个乘数分别做对数运算,然后把两个结果相加,再做一次指数运算。除法只需要把第二步换成减法就行了,而“减法也是通过加法实现”的。乘方(开方)则是由一次对数运算、一次乘法(除法)运算和一次指数运算来完成,其中的乘法(除法)用前述的方式完成。
但是,之所以“计算机都是只做加法不做减法的”,是因为实现加法比实现减法要简单,而不是因为计算机“只能”做加法而“不能”直接做减法。不过,这位先生既然能够用“国产电子管的平均寿命不超过5000小时”和“有上万个电子管”来“推导”出“平均1小时损坏1-2个”,那么,他为了“证明”“计算机都是只能做加法不能做减法的”而发明出“电脉冲发出去(加)不可能收回来(减)”,也就不奇怪了。
当然,简单地说,加法器就是接收到一个电脉冲就加1,而“电脉冲发出去不可能收回来”也算是事实。问题在于:这并不成为“计算机不能做减法”的理由。
电子计算机最基本的运算操作的对象是两个只有一位的二进制数。对于不带符号和进位的两个只有一位的二进制数而言,加法和减法的结果是完全一样的:0+0=0-0=0,0+1=0-1=1,1+0=1-0=1,1+1=1-1=0。所以,如果只进行两个一位二进制数之间的运算,那就根本不需要区分加法和减法,所以也就谈不上“不能做减法”。
要实现多位数的加法和减法,关键在于:如何正确处理两个一位二进制数的加法可能导致的进位和减法可能导致的退位与负数。进位和退位本身的区别其实也不那么要紧,因为进位和退位无非就是加1和减1,而不带符号的加1和减1的结果本来就是一回事。所以,真正关键的问题是如何区分正负号的问题。
于是另一位(也可能是同一位)“明白人”出来说话了:
这只能说明,<>是一群对科技一无所知的蠢货,对计算机算法来说,加,减是一样,不过是换用补码罢了.[ 124.133.126 ] 于2011-10-15 14:47:48 上帖
这才是明白人。[ 117.136.9 ] 于2011-10-15 16:11:54 上帖
没错,对于不带符号的两个一位二进制数而言,“加、减是一样”;减法用加法替代,也确实是“换用补码”。
然而,这仍然只是事实的一部分。全部事实是:“补码”这东西的发明,并非“不过”和“罢了”那么简单。
加法的进位很容易解决,反正都是加法嘛,所以多位的加法是容易实现的。正数和负数的正负号如何表示,人们想到的解决办法也很简单直接:在最高位的前面增加一个“符号位”,0表示正,1表示负。剩下的问题是如何用加法来代替减法。
这样看来,剩下的问题似乎很简单了:要减去一个数,只需要把这个数的符号位从0改为1,然后直接与这个负数做加法,不就行了么?
很遗憾:这样的计算结果会导致错误的结果!
来看一个例子:1-1=?我们当然知道是0。
现在我们用加法1+(-1)来代替。按照上面的正负号表示方法,1记为001,-1记为101,于是1+(-1)=001+101=110。按照上述表示方法,110=-2(第一位1表示负号),于是我们得到1+(-1)=-2!
问题出在哪里呢?简单地说,就出在0上。我们知道+0应该等于-0,但是上面标记正负数的这个办法要求+0不等于-0,必须成为两个不同的数。
这个问题困扰了人们很长时间。如果要坚持用加法来替代减法,看起来就必须修改正负号的标记方法了,那样不是太麻烦了么?
最后的解决办法是“补码”,它保留了用最高位表示符号,也实现了用加法代替减法。究竟是哪位牛人首先提出“补码”来解决这个问题?这件事情已经无法考证,只能认为“补码”的提出是“集体智慧的结晶”了。
至于“补码”是什么玩意,“明白人”们当然都是知道的,即便“不明白”,随便搜一搜就能找到,这里就不浪费时间了。
「 支持!」
您的打赏将用于网站日常运行与维护。
帮助我们办好网站,宣传红色文化!