科学风景真好分享 http://blog.sciencenet.cn/u/sunbing01

博文

刘瑞祥:计算机表示无理数的一些设想

已有 4748 次阅读 2019-3-12 11:40 |个人分类:编程|系统分类:科普集锦

  原则上来说,计算机不能准确地表达无理数,这道理不用我说了吧,但是,通过适当的变通,计算机能不能表达一部分无理数呢?比如我们在中学里常见的无理数。

  我认为是可能的,设想如下:

  第一步,我们先要找到准确表达有理数的方法。我们必须克服用无限多存储单元表达循环小数的想法,而采取另外的方法。我们知道,所谓有理数,无非就是形如m/n的数,其中m、n都是整数,所以我们可以设计一种对象,包括分子和分母两个数值成员,其中分母为正整数,且默认为1,分子可以为任意整数,只要二者都不超过计算机的长整型数据类型就可以。在此基础上,我们可以重载各种运算符,比如+-×÷<>等等,使这些运算符对这种有理数数据类型起作用。

  第二步,再建立一种根式对象,如果觉得麻烦不妨就只建立二次根式对象。假设是后者,不妨以第一步中的有理数对象为成员,而前者还需要再来一个正整数表示被开方的次数。然后我们也重载各种运算符,以实现其计算。

  第三,需要实现嵌套功能吗?这可能会极大增加工作量,为简单起见,嵌套的层数不宜太多,最多不要超过两层。比如最复杂的是sqr(sqr(3)+sqr(5))。

  还有个问题是关于圆周率pi和欧拉常数e的,其实这没多大关系,只要在中间的运算过程中把这俩符号一直保留着就可以。

  这包括了中学阶段的数学,或者说大部分常见的数学,其实这已经很不错了。当然,我们有必要在适当的时候给出这些涉及无理数四则运算的近似值。这时要注意的是,中间过程中要一直用前面介绍的有理数和根式对象,到最后才转为有限小数,这样可以避免累积误差。

  这样作的好处是很多的。举个中学会用到的例子:一是比如我们给学生设计自动解二次方程的系统,不能给学生的答案是x=2.41421,而应该是1+(根号2)这类的。

  最后要说明的是,我不知道现在的解题软件中是怎么处理无理数的,权当是自己的一个想法吧。



https://blog.sciencenet.cn/blog-3388899-1167098.html

上一篇:刘瑞祥:《流浪地球》观感
下一篇:刘瑞祥:有趣的“圆之吻”,有趣的尺规作图
收藏 IP: 218.68.107.*| 热度|

0

该博文允许注册用户评论 请点击登录 评论 (3 个评论)

数据加载中...
扫一扫,分享此博文

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-11-22 07:19

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部