数学中国

 找回密码
 注册
搜索
热搜: 活动 交友 discuz
查看: 3660|回复: 6

咨询:计算机软件如何处理计算误差?人又是如何评估计算机是否算对?

[复制链接]
发表于 2023-12-11 23:50 | 显示全部楼层 |阅读模式
咨询:计算机软件如何处理计算误差?人又是如何评估计算机是否算对?

这段时间,论坛上有几个题目,我用计算机辅助验证,都出现了计算精度问题,导致给出的建议是有问题的。不同的计算软件,给的算法不一样,会导致一些区别。我用的通用软件python,处理计算就很弱,数字大一点误差就不可控。可能一些专业些的软件会好一些,比如mathematic,好多网友都在用。

但是,从理论上说,计算机计算都会出现误差,无论采用哪种算法。无理数是无限不循环数,用浮点数替代就会有误差。而且经过一个函数表达式迭代,一般来说误差还会扩散,或变得更不好控制。在处理极大或极小值时,误差肯定是会出现的。数学中的极限,无穷大无穷小,在计算机软件中如何处理?或者对精度很高的计算时,如何经过一系列函数迭代,误差如何控制?

我看有很多网友喜欢用计算机软件进行证明(注意不是计算机辅助,而是机器完成最主要的证明)。这种证明在理论上是否有很严格的依据?证明肯定靠谱吗?或者直接说,大家是否计算机软件出现过结论不正确的时候?至少我已经见过网友用计算机软件做,得出过明显是错误的结果。更别说用ChatGPT这种更泛化的工具。

计算机工具很有用,一般人主导逻辑推理,计算机主导计算。得出结论的正确性的评估,人一般还能把握住。
发表于 2023-12-12 00:41 | 显示全部楼层
去看看张景中,吴文俊院士的工作。
回复 支持 反对

使用道具 举报

发表于 2023-12-12 09:10 | 显示全部楼层
本帖最后由 uk702 于 2023-12-12 02:03 编辑

Mathematica (其它大多软件也一样),将计算分成两类,一类将输入当成符号,进行符号计算,比如将 \( \sqrt{2} \) 当成一个数学符号进行运算(这时计算速度将明显变慢),计算结果也是一种符号,只有是否最简化,不存在误差之说。

另一种是将输入当成浮点数,当输入的数包含小数点,MMA 就将之视作浮点数,比如  \( \sqrt{2.0} \) ,进行数值运算,数值运算必然包含误差,这就导致 3*(1.0/3) != 1.0 之类的问题。

如何估计误差累积是个重大理论问题,和误差的(分布)“模型”有关,数值计算的书一般会有一个章节,比如将误差视作正态分布,再评估误差累积。

日常中可能要 "拍脑袋" 。日常编程中,如果经过拍脑袋,认为误差累积不会超过 10^-20 时,通常可使用令 c = 10^-20  而 -c < x - y < c 时,就认为 x=y 而 x - y > c 时就认为 x > y。

浮点的世界,也就是生活的真正状态,其实是一个置信区间的世界。

回复 支持 反对

使用道具 举报

发表于 2023-12-12 10:33 | 显示全部楼层
mathematica 经常用于符号计算,这时不存在计算误差问题。
mathematica 用于数值计算时,如果需要,也可以计算到任意精度。这种例子很多。例如:



超越方程也有办法算到任意精度。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

发表于 2023-12-12 10:51 | 显示全部楼层
经典书《计算机程序设计艺术 第2卷 半数值算法》,专门讲数值运算,那位看懂的给大家嘚瑟下。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-12-19 23:07 | 显示全部楼层
感谢楼上各位的答复。

这几天我自己想了下:
一、先看计算精度
理论上说,只要给定了函数f,那么x的一个精度误差,经过f(x)的传递,总可以经过系列计算,控制在指定精度内。如果f比较复杂,或f可以多次迭代,这种精度控制就更复杂一些。但无论如何,理论上都是可以通过有限次计算来做到精度控制的。

关键点1: 计算机自己要内嵌很多函数的精度控制模型。专业的计算机软件就考虑得很多,比如一般多项式的计算都是很成熟的。而且都是经过长时间验证的。

关键点2:总存在一个复杂函数的精度处理,超出了当前计算机的内嵌模型。那么,这个计算软件是否能知道这个事情是它做不了的?它是如实回答我不会,还是仍然一本正经的给出一个答案?
如果是人,一个训练有素的数学家,他肯定能知道哪些结论是确定的,哪些结论是他既不能证实,也不能证伪的。而且有同行评审,可以分析过程是否有问题。但计算机出了问题,人很难去评审它的过程;最多是多种计算软件计算下,比较下结果。即使结果不一样,你也很难知道哪个是对的!

二、对于符号计算:
计算机程序是内嵌了很多公式,可以进行符号分析和逻辑替代。这种处理反而不容易出错!因为不容易出现错误的点,顶多是化简不够,或者做不出来,跟目标形式相差比较大。当然这是针对很严谨的计算机软件而言的。像ChatGPT这种,会出现一本正经的胡说八道的情况,因为它的逻辑根本不是推导性的,而是经验性的,哪个说的多就信谁。

无论如何,计算机辅助在实际应用中都是非常有用的。因为大多数情况下并不关心结果是怎么来的,而是先至少有一个结果,再是结果对不对。结果是否对就是按照指定工具指定步骤操作得出,在实践中应用去验证。

点评

关键点2:总存在一个复杂函数的精度处理,超出了当前计算机的内嵌模型。那么,这个计算软件是否能知道这个事情是它做不了的? --- 很多软件会给你一个结果,但同时告诉(提醒)你,误差可能已经超出给定范围。  发表于 2023-12-20 09:01
回复 支持 1 反对 0

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|数学中国 ( 京ICP备05040119号 )

GMT+8, 2025-6-20 18:39 , Processed in 0.096475 second(s), 17 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表