计算机的错误计算(一百零四)

news2024/10/2 22:27:43

摘要  计算机的错误计算(二十七)引入了错数概念。本节给出更为严格的证明。

       本节主要讨论表达式计算结果中错误有效数字的数量,简称之为错数。因为0不含有有效数字,因此,除非特别说明,否则,本节假设所有表达式的值均不为0;同时,为了便于描述, 本节所有的数值均使用科学记数法来表示。假设 \tilde{x}=0.s_1s_2...\times10^m 为 x=0.t_1t_2...\times10^m 的一个近似值(不妨假设,它们均为正数。下同),其中 m 为它们的指数,$s_i$ 与 $t_i(i\geq1)$ 分别为它们的有效数字,t_1\neq0, s_1\neq0\,.  若

0.1^{j+1}\leq|\frac{\tilde{x}}{10^m}-\frac{x}{10^m}|<0.1^{j}\,\,\,(j\in\mathbb{N})\,, \quad\quad\quad\quad(1)

则称 {\tilde{x}} 具有 $j$ 位正确有效数字,或 \tilde{x} 与 $x$ 具有 $j$ 位相同有效数字。比如, 与 2 相比较,1.996与2.002均具有3位正确的有效数字;而对于0.12999来说,0.12999001与0.13000002分别是其包含7位与4位相同有效数字的近似值。另外,除非特别说明,否则,本节的运算均没有进位。

       设 x_0\in I\,,  其中 I 是 R 上的一个开区间,\tilde{x}_0\in I 是 x_0 的一个近似值,y=f(x) 在 I上可导,并且 f(x_0)\neq f(\tilde{x}_0)\,.
       设 x_0,\,\tilde{x}_0,\,f(x_0),\,f(\tilde{x}_0) 的值为

\left\{ \begin{array}{ll} x_0=0.t_1t_2...t_kt_{k+1}...\times10^{m_1}, & \\ \tilde{x}_0=0.t_1t_2...t_kt'_{k+1}...\times10^{m_1}, & \end{array} \right. \quad\quad \left\{ \begin{array}{ll} f(x_0)=0.s_1s_2...s_ls_{l+1}...\times10^{m_2}, & \\ f(\tilde{x}_0)=0.s_1s_2...s_ls'_{l+1}...\times10^{m_2}, & \end{array} \right.\quad\quad\quad(2)

其中 t_1\neq0,\, s_1\neq0, \,t_{k+1}\neq t'_{k+1},\, s_{l+1}\neq s'_{l+1}\,.
       定理1.  设

\alpha=|\tilde{x}_0-x_0|\times10^{k-m_1}=|0.t_{k+1}...-0.t'_{k+1}...|\,,\quad\quad\quad(3)

\beta=|f(\tilde{x}_0)-f(x_0)|\times10^{l-m_2}=|0.s_{l+1}...-0.s'_{l+1}...|\,. \quad\quad\quad(4)

若它们的小数点后连续0的个数分别为 n_1 与 n_2\,,  而

\gamma=\frac{|f(\tilde{x}_0)-f(x_0)|}{|\tilde{x}_0-x_0|}=0.d_1d_2...\times10^{m_0}\,\,(d_1\neq0)\,, \quad\quad\quad(5)

(k+n_1)=(l+n_2)+M\,.\quad\quad\quad(6)

其中

M=\big{(}(m_1-m_2)+m_0\big{)} -one\_or\_zero\,,\quad\quad\quad(7)

而 one\_or\_zero\in\{0,1\}\,.

        证明  首先, 由已知条件可得

10^{-n_1-1}\leq\alpha < 10^{-n_1}\,,\quad\quad\quad(8)

10^{-n_2-1}\leq\beta < 10^{-n_2}\,,\quad\quad\quad(9)

10^{m_0-1}\leq\gamma <10^{m_0}\,.\quad\quad\quad(10)

然后, 由(10)与(3)、(4)可知

10^{m_0-1}\leq\frac{\beta\times10^{m_2-l}}{\alpha\times10^{m_1-k}}< 10^{m_0}\,.\quad\quad\quad(11)

10^{m_0-1-(m_2-l)+(m_1-k)}\leq\frac{\beta}{\alpha}< 10^{m_0-(m_2-l)+(m_1-k)}\,.\quad\quad\quad(12)

再通过(8)与(9), 将 \frac{\beta}{\alpha} 放大和缩小:

\left\{ \begin{array}{ll} 10^{m_0-1-(m_2-l)+(m_1-k)}\leq \frac{\beta}{\alpha} < \frac{10^{-n_2}}{10^{-n_1-1}}=10^{-n_2+n_1+1}, & \\ 10^{-n_2-1+n_1}= \frac{10^{-n_2-1}}{10^{-n_1}}< \frac{\beta}{\alpha} < 10^{m_0-(m_2-l)+(m_1-k)}. & \end{array} \right.

这时,由两个不等式的各自左右两项可得

\left\{ \begin{array}{ll} {m_0-1-(m_2-l)+(m_1-k)}<{-n_2+n_1+1}, & \\ {-n_2-1+n_1}<{m_0-(m_2-l)+(m_1-k )} .& \end{array} \right.

\left\{ \begin{array}{ll} (l+n_2)+((m_1-m_2)+m_0)-2<{(k+n_1)}, & \\ (k+n_1)< (l+n_2)+((m_1-m_2)+m_0)+1.& \end{array} \right.

因此,可推得

(l+n_2)+((m_1-m_2)+m_0)-2\,\,\\< \,\,(k+n_1)\,\,\\<\,\, (l+n_2)+((m_1-m_2)+m_0)+1.

由于上述不等式中的每个符号均取整数,因此有

(l+n_2)+((m_1-m_2)+m_0)-1\,\,\\\leq\,\,(k+n_1)\,\,\quad\quad\quad\quad\quad\quad\quad\quad\quad\quad\quad\quad\quad\quad(13)\\\leq\,\, (l+n_2)+((m_1-m_2)+m_0).

从而定理得证。

       根据(1)中相同有效数字定义,显然,k+n_1 为 \tilde{x}_0 与 x_0 相同有效数字个数;而 l+n_2 为 f(\tilde{x}_0) 与 f(x_0) 相同有效数字个数。这样,上述 M 就是 f(\tilde{x}_0) 的错数. 因此, 我们有下面推论:

       推论  若 M>0\,,  则 f(x) 关于 (x_0,\,\tilde{x}_0) 的错数为下列二者之一:

m_1-m_2+m_0\,,\,\,\,m_1-m_2+m_0-1\,.

       上述推论说明, 若 m_1-m_2+m_0>0\,,  则对自变量的一点扰动,就可能导致对应函数值具有 m_1-m_2+m_0 或 m_1-m_2+m_0-1 位错误数字。

参考文献

[1] 赵世忠. 浮点运算错误计算原因. 中国科技论文在线. 2017.  https://www.paper.edu.cn/releasepaper/content/201707-86

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2165912.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Go】-Websocket的使用

目录 为什么需要websocket 使用场景 在线教育 视频弹幕 Web端即时通信方式 什么是web端即时通讯技术&#xff1f; 轮询 长轮询 长连接 SSE websocket 通信方式总结 Websocket介绍 协议升级 连接确认 数据帧 socket和websocket 常见状态码 gorilla/websocket实…

10-pg内核之锁管理器(五)行锁

概念 数据库采用MVCC方式进行并发控制&#xff0c;读写并不会互相阻塞&#xff0c;但是写之间仍然存在冲突。如果还是采用常规锁那样加锁&#xff0c;则会耗费大量共享内存&#xff0c;进而影响性能。所以行锁通过元组级常规锁和xmax结合的方式实现。一般先通过xmax进行可见性…

Unity 新导航寻路演示(2)

对于静态场景来说&#xff0c;只需要3步 1.为场景Ground添加网格表面组件并烘焙 2.为player添加导航代理 using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.AI;public class PlayerMove : MonoBehaviour {private NavMes…

2D动画转3D角色!无需建模- comfyUI工作流一键生成3d效果图!

如何将2d角色转化成3d角色&#xff1f; 不需要建模&#xff0c;通过一个2d转3d的工作流可以直接将你的2d图片转化成3d效果图。 而且操作特别简单&#xff0c;只需要3个步骤&#xff0c;这篇内容我们来说下这个工作路的使用 工作流特点 任意2D图片转换成3D风格 基于sd1.5模型…

ftdi_sio驱动学习笔记 3 - 端口操作

目录 1. ftdi_port_probe 1.1 私有数据结构ftdi_private 1.2 特殊probe处理 1.3 确定FTDI设备类型 1.4 确定最大数据包大小 1.5 设置读取延迟时间 1.6 初始化GPIO 1.6.1 使能GPIO 1.6.2 添加到系统 1.6.2.1 设置GPIO控制器的基本信息 1.6.2.2 设置GPIO控制器的元信息…

Apache Iceberg 与 Spark整合-使用教程(Iceberg 官方文档解析)

官方文档链接&#xff08;Spark整合Iceberg&#xff09; 1.Getting Started Spark 目前是进行 Iceberg 操作最丰富的计算引擎。官方建议从 Spark 开始&#xff0c;以理解 Iceberg 的概念和功能。 The latest version of Iceberg is 1.6.1.&#xff08;2024年9月24日11:45:55&…

如何在云端使用 Browserless 进行网页抓取?

云浏览器是什么&#xff1f; 云浏览器是一种基于云的组合&#xff0c;它将网页浏览器应用程序与一个虚拟化的容器相结合&#xff0c;实现了远程浏览器隔离的概念。开发人员可以使用流行的工具&#xff08;如 Playwright 和​ Puppeteer​&#xff09;来自动化网页浏览器&#…

repo 查看指定日期内,哪些仓库有修改,具体的修改详情

文章目录 想看指定时间段内仓库中修改了哪些具体的文件&#xff0c;是谁修改的&#xff0c;commit的备注信息等详情只想看某段时间内有更改的仓库的修改详情&#xff0c;其他没有修改的仓库不显示。 想看指定时间段内仓库中修改了哪些具体的文件&#xff0c;是谁修改的&#xf…

VSCode#include头文件时找不到头文件:我的解决方法

0.前言 1.在学习了Linux之后&#xff0c;我平常大部分都使用本地的XShell或者VSCode连接远程云服务器写代码&#xff0c;CentOS的包管理器为我省去了不少繁琐的事情&#xff0c;今天使用vscode打开本地目录想写点代码发现#include头文件后&#xff0c;下方出现了波浪线&#…

SparkSQL-初识

一、概览 Spark SQL and DataFrames - Spark 3.5.2 Documentation 我们先看下官网的描述&#xff1a; SparkSQL是用于结构化数据处理的Spark模块&#xff0c;与基本的Spark RDD API不同。Spark SQL提供的接口为Spark提供了更多关于正在执行的数据和计算结构的信息。在内部&a…

C++中vector类的使用

目录 1.vector类常用接口说明 1.1默认成员函数 1.1.1构造函数(constructor) 1.1.2 赋值运算符重载(operator()) 2. vector对象的访问及遍历操作(Iterators and Element access) 3.vector类对象的容量操作(Capacity) 4. vector类对象的修改及相关操作(Modifiers and Stri…

【Java数据结构】 ---对象的比较

乐观学习&#xff0c;乐观生活&#xff0c;才能不断前进啊&#xff01;&#xff01;&#xff01; 我的主页&#xff1a;optimistic_chen 我的专栏&#xff1a;c语言 &#xff0c;Java 欢迎大家访问~ 创作不易&#xff0c;大佬们点赞鼓励下吧~ 前言 上图中&#xff0c;线性表、堆…

[Redis][主从复制][上]详细讲解

目录 0.前言1.配置1.建立复制2.断开复制3.安全性4.只读5.传输延迟 2.拓扑1.一主一从结构2.一主多从结构2.树形主从结构 0.前言 说明&#xff1a;该章节相关操作不需要记忆&#xff0c;理解流程和原理即可&#xff0c;用的时候能自主查到即可主从复制&#xff1f; 分布式系统中…

PyTorch自定义学习率调度器实现指南

在深度学习训练过程中&#xff0c;学习率调度器扮演着至关重要的角色。这主要是因为在训练的不同阶段&#xff0c;模型的学习动态会发生显著变化。 在训练初期&#xff0c;损失函数通常呈现剧烈波动&#xff0c;梯度值较大且不稳定。此阶段的主要目标是在优化空间中快速接近某…

ResNet残差网络:深度学习的里程碑

引言 在深度学习领域&#xff0c;卷积神经网络&#xff08;CNN&#xff09;的发展一直推动着图像识别、目标检测等任务的进步。然而&#xff0c;随着网络层数的增加&#xff0c;传统的CNN面临着梯度消失和梯度爆炸等难题&#xff0c;限制了深层网络的训练效果。为了克服这些挑…

oracle direct path read处理过程

文章目录 缘起处理过程1.AWR Report 分析2.调查direct path read发生的table3.获取sql text4.解释sql并输出执行计划&#xff1a; 结论&#xff1a;补充direct path read等待事件说明 缘起 记录direct path read处理过程 处理过程 1.AWR Report 分析 问题发生时间段awr如下…

FortiGate OSPF动态路由协议配置

1.目的 本文档针对 FortiGate 的 OSPF 动态路由协议说明。OSPF 路由协议是一种 典型的链路状态(Link-state)的路由协议,一般用于同一个路由域内。在这里,路由 域是指一个自治系统,即 AS,它是指一组通过统一的路由政策或路由协议互相交 换路由信息的网络。在这个 AS 中,所有的 …

基于JSP+Servlet+Layui实现的博客系统

> 这是一个使用 Java 和 JSP 开发的博客系统&#xff0c;并使用 Layui 作为前端框架。 > 它包含多种功能&#xff0c;比如文章发布、评论管理、用户管理等。 > 它非常适合作为 Java 初学者的练习项目。 一、项目演示 - 博客首页 - 加载动画 - 右侧搜索框可以输入…

开源服务器管理软件Nexterm

什么是 Nexterm &#xff1f; Nexterm 是一款用于 SSH、VNC 和 RDP 的开源服务器管理软件。 安装 在群晖上以 Docker 方式安装。 在注册表中搜索 nexterm &#xff0c;选择第一个 germannewsmaker/nexterm&#xff0c;版本选择 latest。 本文写作时&#xff0c; latest 版本对…

【STM32】RTT-Studio中HAL库开发教程七:IIC通信--EEPROM存储器FM24C04

文章目录 一、简介二、模拟IIC时序三、读写流程四、完整代码五、测试验证 一、简介 FM24C04D&#xff0c;4K串行EEPROM&#xff1a;内部32页&#xff0c;每个16字节&#xff0c;4K需要一个11位的数据字地址进行随机字寻址。FM24C04D提供4096位串行电可擦除和可编程只读存储器&a…