乘法交换律并非恒成立,乘法分配律在小数生效是巧合吗

之前有人问我一个有意思的问题,乘法交换律是不是任何场景下都成立。我第一反应自然是肯定,a乘b等于b乘a,这是小学就学的基础知识。但细想之后发现,这个结论并不是万能的。矩阵乘法就不满足交换律,A乘B和B乘A计算出来的结果完全不同。四元数乘法同样不适用,这是哈密顿当年在桥上得到的重大发现。所以严格来讲,乘法交换律永远成立只适用于标量算术,跳出这个范围就不一定成立。

科学

这里还有个更细致的点值得琢磨。日常计算小数,像0.3乘0.7,交换数字顺序计算0.7乘0.3,结果都是0.21,交换律完全可以正常使用。乘法分配律也一样,0.2乘(0.3加0.5),和0.2乘0.3加上0.2乘0.5,两边计算结果都是0.16。小数的这些运算规律和整数没有差别。不少人会觉得疑惑,小数不属于整数,为什么这些运算规则依旧适用,难道只是巧合?

想要解答这个疑问,先要明白小数到底是什么。小数并不是独立的一类数字,它只是分数的另一种书写形式。0.3等同于十分之三,0.25就是百分之二十五,0.3333循环代表三分之一。转化成分数之后,这些数字全部属于有理数。有理数由整数拓展而来,整数集属于环,有理数集属于域,域本身的定义就自带交换律与分配律。小数能满足这些运算定律,并不是偶然,根源在于小数本身就归属于有理数体系,继承了有理数作为域的全部特性。计算0.3和0.7互换相乘,本质就是十分之三和十分之七交换位置做分数乘法,分数乘法自然支持交换顺序。

那为什么会有人对此产生疑问?大概率是十进制书写小数带来的错觉。看到0.1、0.2、0.3这类数字,很容易下意识认为它们和1、2、3属于两套完全不同的数字。尤其是计算0.1加0.2等于0.3这类题目,甚至有人会疑惑为什么结果不是0.30,小数点仿佛让数字变得特殊。实际上小数点仅仅是标记符号,不会改变数字本身的属性。0.1加0.2等于0.3,和1加2等于3,底层运算逻辑一致,都是在有理数域中完成加法。换成其他进制,比如二进制,0.1就会写成0.0001100110011无限循环,观感会更加怪异,但它依旧是同一个有理数,运算定律不会失效。

真正会破坏交换律、分配律的不是小数,而是计算机内部的浮点数运算。用计算机计算0.1加0.2,得到的结果是0.30000000000000004,并不是0.3。原因是计算机依靠二进制存储小数,很多十进制小数转化成二进制之后会变成无限循环小数,无法完整保存,只能截断数值,截断操作就产生误差。误差不断累积,有时会出现a乘b和b乘a计算结果不一致,或是分配律等式两边数值存在微小差距。但这并不是数学本身存在问题,是计算机存储数字的方式造成的。如果用纸笔直接换算成分数计算,这类误差就不会出现。

回到最开始的问题。小数计算可以使用乘法交换律与分配律,并不是巧合,原因就是小数只是有理数的另一种写法。矩阵、四元数、部分向量积不满足交换律,它们和小数不属于同一套代数结构。两个矩阵调换顺序相乘结果不一样,根源在于矩阵乘法的定义本身就规定了运算顺序不能改动,和小数运算完全是两回事。把两件事混在一起看待,才会觉得小数满足交换律是一件需要专门解释的奇特现象。其实根本不需要复杂解释,翻看有理数的定义,交换律和分配律本身就是它的固有属性。小数只是套上了十进制的外壳,内核还是大家熟悉的有理数。

⚠️免责提示

本文内容整理于互联网,仅供参考,不构成任何投资、决策建议。部分素材来源于公开网络,如有侵权请联系平台进行删除处理。

蜘蛛不属于昆虫纲,生物分类上蜘蛛属于哪一类 叶绿素的演化过程:它究竟是如何进化产生的
相关阅读