专栏名称: 程序员之家
程序员第一自媒体,与你探讨码农人生路上遇到的各类泛技术话题,定期为你推荐码农人生思考、感悟以及启迪!
目录
相关文章推荐
程序员的那些事  ·  趣图:开发的常见借口之一 ·  1 周前  
程序员的那些事  ·  趣图:项目团队成员速览 ·  1 周前  
51好读  ›  专栏  ›  程序员之家

为什么 5 x 3 = 5 + 5 + 5 是错的?

程序员之家  · 公众号  · 程序员  · 2017-03-14 21:05

正文

   作者:Brett Berry

   原文:Why Was 5 x 3 = 5 + 5 + 5 Marked Wrong

   翻译:藏精阁

   译文:http://www.jianshu.com/p/822965e959ea


5 x 3 = 5 + 5 + 5 居然不对,这看起来很荒诞,不是吗?


可以归结为一个理由





相等 VS 等价


原因仅仅在于,两个相等的东西并不意味着它们是等价的

根据定义,相等的意思是,“在数量,大小,深度,或者价值方面一样。”而等价,则是“在价值,数量,功能,或者意义方面的对等。”


上文中的5x3和5+5+5相等,但它们并不必然等价。等价与意义有关,它取决于乘法的意义,正如方位的指向。


我做了件之前从未做过的事,我查阅了乘法的定义。



"multiplication",via wikipedia


正如我怀疑的那样,乘法中的第一个“值”是倍数,第二个“值”是被乘数。


所以根据定义,5x3和5个3,或者那个老师标注的3+3+3+3+3是等价的。5x3和5+5+5的算术结果相等,但并不等价。因为3个5是另外一回事。


举个例子,3组每5个为一组的香蕉跟5组3个为一组的香蕉不一样,尽管香蕉的总数一样,都是15。二者的结构不同。


再举个例子,30 ÷ 2也等于15,但30 ÷ 2能代表乘法吗?


30 ÷ 2 = 15


显然不能,它表示的含义是分割。因此,5+5+5和30 ÷ 2的算术结果相等,但二者并不等价。


我弄清区别了,但这是不是有点过于苛刻?


这得看情况。如果老师已经教了乘法交换律(a x b = b x a),那么这种变换就无伤大雅。


如果老师还没有教,那么让学生继续那种想法就不太明智。


为什么?


一个常见现象是,对于初学者来说,在二元运算里,当不同层级的价值可以互换的时候,他们很容易产生困惑。


我们知道以下算式并不相等:




小孩子发现有些时候互换数值没错,有些时候却不对,这很容易让他们感到不解。通过把关注点放在这些运算的含义上,并跟上下文对应起来的手段,老师试图让学生远离这种低级错误。


可是那个答案没错啊,为什么数值的意义稍有区别,就变得十分要紧?


如今,对学生而言,从小就理解“结果上的相等”和“意义上的等价”的区别比过去的任何时代都更重要。因为这是计算机科学的基本概念。


在编程当中,两个东西相等或等价(同一、完全一致),二者区别很大。


相等意味着它们的数值一样,比如5+5+5= 30 ÷ 2 = 15 。


等价不仅意味着数值上的相等,还意味着它们是相同的数据类型。


换句话说,它们表示的的同一个东西。


基于不同的语言,看起来一样的数值和表达式并不总是同一个东西。


比如,在JavaScript中,如果我们用操作符 == 作相等测试:


·“4”== 4 returns True


因为二者都指的是数字4。但是如果我们用操作符===再来一次,结果是这样:


·“4”=== 4 returns False


因为它们不是同一个元素。左边的是string字符串,而右边的是一个数字。


矩阵乘法该有的思维模式


注意到了么,上面的第二个例子也被标为错误。为什么用4列6代替6列4那么重要?


这不仅源于乘法的定义,它还教给学生图解矩阵的正确指令,即列数乘以行数。


保持列与行的线性在矩阵乘法中相当重要。矩阵用行符列符m x n来标记。


把矩阵乘起来,你用第一个矩阵的行数乘以第二个矩阵的列数。第一个矩阵的列数必须跟第二个矩阵的行数相等,否则,你没法将它们相乘。


比如,我们可以用一个2 x 3 的矩阵乘以一个 3 x 4 的矩阵。然而如果我们交换指令用一个3 x 4矩阵乘以一个2 x 3 矩阵,那么就没有足够的列和行,运算就没法完成。


学生学习正确的乘法定义和图解异常重要,之后他们就不会被搞晕了。


我知道这令人沮丧,但是尊重那些老师吧!


他们在孩童教育方面是合格的专家。对于学生,他们心中有着最良好的心愿。如果你感到困惑,在你抨击他们并晒到网上之前,先去问问他们为什么那么做。





微信公众号内回复数字“1”

小编拉你进粉丝微信群

不是在文章评论里回复哦