当前位置: 首页 > news >正文

计算机的错误计算(一百八十六)

摘要  就上节(即(一百八十五))内容,有读者来信,建议用另外一个大模型计算。本节详细讲解该大模型的对错,特别是涉及 Python Decimal的内容以及泰勒展式内容。

例1.  已知

f(x)=\frac{\tan(x)-\sin(x)}{x-\sqrt{1+x^2}}\,, \, x_0=0.125\textup{e}-6\,.

用大模型计算 f(x_0)\,.

       下面是与第三个大模型的对话。



       以上为大模型的输出。

点评:

     (1)大模型使用 Python 的 decimal 模块来确保高精度计算。这比上节的大模型有一点进步。

     (2)由于 Decimal中没有tan()、sin()等方法或函数,因此不得不先调用 math中函数。

     (3)但是,math中的 tan、sin、sqrt函数,其正确的有效位数有个上限:一般不会超过16位有效数字。这个由 double类型决定。比如,math.sin(190),虽然在内存中储存有0.9977992786806002545318960983422584831714630126953125(共52位有效数字),但是,只有前16位数字 “9977992786806002”是正确的。

     (4)上述上限16决定了程序结果的短板:正确的有效数字位数不会超过它,虽然 getcontext().prec = 50 .  实际上,“getcontext().prec = 50”是白白设置了。

     (5)“getcontext().prec = 50”  的注解:“设置精度为50位小数” 是错误的;应该是设置50位有效数字。

     (6)同样,由于使用了 math, 那么 Decimal也是白白被浪费了。

     (7)照这样计算下去,那么 tan(x0)与 sin(x0)均只有16位正确数字。而它们这些数字,即32位数字,几乎全部对应位置的数字相同。因此,相减后,正确数字所剩无几。再进行相除后,当然仍然没有几位正确数字。

     (8)在Python 3.12中执行大模型的代码,则输出为50位的值:-9.7938196768552311641126445270730663791431933912047E-22 .  这样,正如所料,正确数字只有2位。因为,16位的正确结果为 -0.9765626220703239e-21(ISRealsoft 提供)。 

     (9)大模型似乎也知道这一点。因此,它利用泰勒展式进行了化简。它的化简过程基本是正确的。

     (10)它的结果也基本正确。只有最后一位数字是错误的:不是'5', 而应是'6' .

     (11)若是结果保留16位有效数字,那么该怎么办呢?

     (12)首先,分母、分子均需保留最少16位有效数字。

     (13)对于分母,在其化简中,应保留 -\frac{x^2}{2} 。因为,x 的指数是-6;平方后也仅仅是-12,即使再除以 2,也才-13。这样的数与1相加减后,16位的结果中还保留3位左右呢。

     (14)当然,对于分母,x更不应该删去。

     (15)同样,分子中的 tan(x)与 sin(x)均应保留 x^5 项:\frac{2x^5}{15} 与 \frac{x^5}{5!}\,.

     (16)最终,化简后应为

 \displaystyle \frac{\frac{x^3}{2}+\frac{2x^5}{15}-\frac{x^5}{5!}}{x-1-\frac{x^2}{2}}\,.

     (17)这样,代入并相除以后,就会有16位正确有效数字。当然,最后一行的半句话“运行上述 Python 代码将给出更精确的结果。”是错误的。

     (18)另外,math中的 sin等函数有时会输出错误结果。比如,自变量比较大时。

http://www.lryc.cn/news/507022.html

相关文章:

  • 当我用影刀AI Power做了一个旅游攻略小助手
  • 首批|云轴科技ZStack成为开放智算产业联盟首批会员单位
  • MMO之AOI
  • linux---多线程
  • 【JavaEE初阶】线程 和 thread
  • 如何规避eBay账号被封的风险?原因与对策
  • Word使用分隔符实现页面部分分栏
  • Express (nodejs) 相关
  • 【Harmony Next】多个图文配合解释DevEco Studio工程中,如何配置App相关内容,一次解决多个问题?
  • 台球助教平台开发球厅预约选择机制和助教匹配选择机制详细需求实例说明(第十四章)
  • MyBatis通过注解配置执行SQL语句原理源码分析
  • 开放词汇目标检测(Open-Vocabulary Object Detection, OVOD)综述
  • PHP基础
  • 启用WSL后,使用ssh通道连接ubuntu
  • GMSSL的不同python版本
  • 【数理统计】参数估计
  • ios 混合开发应用白屏问题
  • 对分布式系统的理解以及redis的分布式实现
  • VS项目,在生成的时候自动修改版本号
  • 【蓝桥杯】43699-四平方和
  • 我的“双胞同体”发布模式的描述与展望
  • flask_socketio 以继承 Namespace方式实现一个网页聊天应用
  • go mod tidy 命令
  • (11)YOLOv9算法基本原理
  • python学opencv|读取图像(十七)认识alpha通道
  • 中小学教室多媒体电脑安全登录解决方案
  • Redis篇之Redis高可用模式参数调优,提高Redis性能
  • linux-----进程execl簇函数
  • Vue + ECharts 实现山东地图展示与交互
  • 【Verilog】UDP用户原语