原则上来说,计算机不能准确地表达无理数,这道理不用我说了吧,但是,通过适当的变通,计算机能不能表达一部分无理数呢?比如我们在中学里常见的无理数。
我认为是可能的,设想如下:
第一步,我们先要找到准确表达有理数的方法。我们必须克服用无限多存储单元表达循环小数的想法,而采取另外的方法。我们知道,所谓有理数,无非就是形如m/n的数,其中m、n都是整数,所以我们可以设计一种对象,包括分子和分母两个数值成员,其中分母为正整数,且默认为1,分子可以为任意整数,只要二者都不超过计算机的长整型数据类型就可以。在此基础上,我们可以重载各种运算符,比如+-×÷<>等等,使这些运算符对这种有理数数据类型起作用。
第二步,再建立一种根式对象,如果觉得麻烦不妨就只建立二次根式对象。假设是后者,不妨以第一步中的有理数对象为成员,而前者还需要再来一个正整数表示被开方的次数。然后我们也重载各种运算符,以实现其计算。
第三,需要实现嵌套功能吗?这可能会极大增加工作量,为简单起见,嵌套的层数不宜太多,最多不要超过两层。比如最复杂的是sqr(sqr(3)+sqr(5))。
还有个问题是关于圆周率pi和欧拉常数e的,其实这没多大关系,只要在中间的运算过程中把这俩符号一直保留着就可以。
这包括了中学阶段的数学,或者说大部分常见的数学,其实这已经很不错了。当然,我们有必要在适当的时候给出这些涉及无理数四则运算的近似值。这时要注意的是,中间过程中要一直用前面介绍的有理数和根式对象,到最后才转为有限小数,这样可以避免累积误差。
这样作的好处是很多的。举个中学会用到的例子:一是比如我们给学生设计自动解二次方程的系统,不能给学生的答案是x=2.41421,而应该是1+(根号2)这类的。
最后要说明的是,我不知道现在的解题软件中是怎么处理无理数的,权当是自己的一个想法吧。
转载本文请联系原作者获取授权,同时请注明本文来自孙冰科学网博客。
链接地址:https://wap.sciencenet.cn/blog-3388899-1167098.html?mobile=1
收藏