美文网首页
数值计算day1-计算机中的浮点数;误差;数学基础

数值计算day1-计算机中的浮点数;误差;数学基础

作者: xkzhai | 来源:发表于2019-07-28 10:31 被阅读0次

鉴于课堂笔记较为潦草,这里将为期两周的暑期学校学习内容整理到博客中,一来今后查阅起来比较方便,二来学过的东西如果不趁热整理很快就会忘记。

书籍:Numerical Methods for Engineers and Scientist--《工程科学中的数值计算》
课时:24小时

1. 计算机中浮点数的表示

1.1 十进制浮点表示

d.ddddd\times 10^p 其中0.dddddd称作小数部分(mantissa)

例子:

  • 6519.23 = 6.51923\times 10^3
  • 0.00000391 = 3.91\times 10^{-6}

10的次幂p表示数据的数量级,小数点前面的数字要小于5,否则数量级为p+1。在这里,3.91\times 10^{-6}的数量级为10^{-6},记为O(10^{-6});而 6.51923\times 10^3的数量级为10^4

1.2 二进制浮点表示

1.bbbbbb\times 2^{bbb}

2 的次幂称作指数部分(exponent),小数部分和指数部分都应该写为二进制形式。50=\frac{50}{2^5}\times 2^5=1.5625\times 2^5,\text{二进制浮点数:} 1.1001\times 2^{101} 转换方法: 50=\frac{50}{2^5}\times 2^5=\frac{32+16+2}{2^5}\times 2^5=\frac{110010.0}{2^5}\times 2^{101}=\text{(小数点左移5位)}1.1001\times 2^{101}

例子:

  • 1344=\frac{1344}{2^{10}}\times 2^{10}=\frac{1024+256+64}{2^{10}}\times 2^{10}=\frac{10101000000.0}{2^{10}}\times 2^{10}=\text{(小数点左移10位)}1.0101\times 2^{1010}
  • 0.3125 = \frac{0.3125}{2^{-2}}\times 2^{-2}= \frac{0.25+0.0625}{2^{-2}}\times 2^{-10}=\frac{0.0101}{2^{-2}}\times 2^{-10}=\text{(小数点右移2位)}1.01\times 2^{-10}
1.3 IEEE-754标准

在计算机中存储二进制浮点数,小数点前的数字1不需要存储,IEEE-754标准分为单精度(single precision)和双精度(double precision)。在单精度中,使用32位(4字节)存储浮点数,双精度使用64位(8字节)存储。两者的首位均为符号位,0对应着+1对应着-。接下来的8位存储指数部分(双精度中使用11位),最后23位存储小数部分(双精度中使用52位)。

image

小数部分存储为二进制,指数部分的值需要加上一个偏差(bias)。以双精度为例,用于存储指数部分的11位二进制能存储的最大值是2047,使用1023为偏差,即当指数部分为4时,实际存储的值为4+1023=1027,按照此逻辑,指数部分能存储的最小值为-1023,最大值为1024。但是,最小和最大的指数值(加上偏差)被留作表示0Inf以及NaN。如果指数部分加上偏差为0,小数部分为0时,存储的是0;如果指数部分加上偏差为2047(全部为1),当小数部分为0时,存储的是Inf,当小数部分不为0时,存储的是NaN(在单精度中,偏差为127)。

例子:22.5=\frac{22.5}{2^4}\times 2^4 = \frac{16+4+2+0.5}{2^4}\times 2^4=frac{10110.1}{2^4}\times 2^{4}=1.01101\times 2^4 指数部分为4,存储为4+1023=1027=1024+2+1=10000000011,小数部分为0.01101000...000:

image

注意

  • 在双精度中,存储的最小正数为 2^{-1022}\approx 2.2\times 10^{-308}\ \text{($0\ 00000000001\ 000...000$)} 此数与0之间的数无法被计算机存储;
  • 在双精度中,存储的最大正数为 2^{1024}\approx = 1.8\times 10^{308}\ \text{($0\ 11111111110\ 111...111=(1+2^{-1}+...+2^{-52})\times 2^{1023}$)}
image

2. 数值方法中的误差

2.1 Round-Off Errors (舍入误差)

舍入误差分为两类:

  • 截取(chopping off) \frac{2}{3}=0.666...\approx 0.666

  • 四舍五入(rounding) \frac{2}{3}=0.666...\approx 0.667

例子: x = 9890.9 = 9.8909\times 10^3, y = 9887.1=9.8871\times 10^3

采用截取(chopping off):\bar{x} = 9.890\times 10^3, \bar{y} = 9.887 \times 10^3
采用舍入(rounding):\tilde{x} = 9.891\times 10^3, \tilde{y} = 9.887 \times 10^3

两种舍入产生的差值分别为:\bar{x}-\bar{y} = 0.003 \times 10^3 = 3, \tilde{x}-\tilde{y} = 0.004 \times 10^3 = 4,两值实际的差距为3.8,在此问题中,四舍五入更接近真实值。

2.2 Truncation Errors (截断误差)

截断误差依赖于使用的数值方法

考虑正弦函数的如下泰勒展开: sinx = 1-\frac{x^3}{3!}+\frac{x^5}{5!}-\frac{x^7}{7!}+...x=\frac{\pi}{6}时,sinx = \frac{1}{2}。若只取第一项,sinx\approx x = \frac{\pi}{6}\approx 0.5235988,截断误差为E^{TR} = Exact - Numerical = -0.0235988;若取前两项,sinx\approx = x-\frac{x^3}{3!} = 0.4996742, 截断误差为E^{TR} = Exact - Numerical = 0.0003258

2.3 Total Error (总误差)

数值解的总误差也叫真实误差(true error),包括舍入误差和截断误差两部分,是真实解和数值解之间的差值:TrueError = TrueSolution - NumericalSolution 真实误差的绝对值和真实解的比值称作真实相对误差:TrueRelativeError = |\frac{TrueSolution-NumericalSolution}{TrueSolution}|

3. 数学基础

3.1 函数的连续性

定义:函数f(x)称作在x=a处连续,如果以下三个条件成立:

  • f(a) 存在
  • 极限\lim\limits_{x\longrightarrow a}存在
  • \lim\limits_{x\longrightarrow a}f(x) = f(a)

介值定理(Intermediate value theorem)f(x)在闭区间[a,b]上连续,M是介于f(a)f(b)之间的数值,则至少存在一个点c\in [a,b]使得f(c)=M

image
3.2 函数的可微性

函数y=f(x)在点x=a处的导数记为\frac{dy}{dx},y',\frac{df}{dx},f'(a), 定义为:\frac{dy}{dx}|_{x=a} =f'(a) = \lim\limits_{x\longrightarrow a} \frac{f(x)-f(a)}{x-a}

image
可导函数则必是连续函数,连续函数未必可导,一个连续可导的函数称作是光滑的(smooth)。
链式法则:函数,其中,则

微分中值定理(Mean value theorem for derivatives)f(x)在闭区间[a,b]上连续,在开区间(a,b)上可导,则存在一个数c\in (a,b),使得f'(c) = \frac{dy}{dx}|_{x=c}=\frac{f(b)-f(a)}{b-a}

image
3.3 函数的积分

积分基本定理:函数f(x)在闭区间[a,b]上连续,F(x)f(x)[a,b]上的不定积分,则:\int_{a}^{b}f(x)dx = F(b)-F(a)
积分中值定理:函数f(x)在闭区间[a,b]上连续,存在c\in [a,b]使得:\int_{a}^{b}f(x)dx = f(c)(b-a)f(c)称作是函数f(x)在区间[a,b]上的均值(average value):<f> = \frac{1}{b-a}\int_{a}^{b}f(x)dx

image
变上下限积分
  • \frac{d}{dx}[\int_{a}^xf(t)dt]=f(x)
  • \frac{d}{dx}\int_{v(x)}^{u(x)}f(t)dt=f(u(x))\frac{u(x)}{dx}-f(v(x))\frac{dv(x)}{dx}
  • \frac{d}{dx}\int_{a(x)}^{b(x)}f(x,t)dt = f(x,b(x))b(x)-f(x,a(x))a(x)+\int_{a(x)}^{b(x)}\frac{\partial f(x,t)}{\partial x}dt

4. 总结

本节课主要讲述了浮点数在计算机中的表示方法,其中IEEE-754标准是20世纪80年代以来最广泛使用的浮点数运算标准,为许多CPU与浮点运算器所采用。之后,介绍了数值计算中的几种常用的误差,包括舍入误差、截断误差等。最后简单回顾了一下函数连续、可微等数学背景。课堂中,还简单演示了MATLAB中向量、矩阵的相关运算,较为简单,这里没有做总结,后续笔记中,会涉及到相应的一些操作。

相关文章

  • 数值计算day2-求解非线性方程

    上节课介绍了计算机中浮点数的表示方法,数值计算中涉及到的几种误差以及数值方法这门课中的一些数学基础。本节课将介绍如...

  • 数值计算day1-计算机中的浮点数;误差;数学基础

    鉴于课堂笔记较为潦草,这里将为期两周的暑期学校学习内容整理到博客中,一来今后查阅起来比较方便,二来学过的东西如果不...

  • Double类型运算的精度问题

    浮点数值不适用于无法接受舍入误差的计算中。 舍入误差的主要原因在于浮点数值采用二进制系统表示,而二进制系统中无法精...

  • 点滴笔记(2018年08月24日更新)

    问:浮点数为什么存在精度问题? 计算机中的浮点数对应于数学当中的小数。简单计算下,32位浮点数最多可以表示2^32...

  • 数值分析:误差

    1 误差的来源 模型误差:数学模型与实际问题之间出现的误差 方法误差:由数值计算方法所得到的近似解与模型的准确解的...

  • Python浮点数精度损失问题

    浮点数误差浮点数一个普遍的问题就是在计算机的世界中,浮点数并不能准确地表示十进制。并且,即便是最简单的数学运算,也...

  • python 浮点数精确运算解决方案 !

    浮点数误差 浮点数一个普遍的问题就是在计算机的世界中,浮点数并不能准确地表示十进制。并且,即便是最简单的数学运算,...

  • js处理浮点数计算误差(精确度)

    js处理浮点数计算误差众所周知, 浮点计算会产生舍入误差的问题, 比如, 0.1 + 0.2, 结果应该是0 .3...

  • NSDecimalNumber - 精确的数值计算

    浮点数计算会存在误差float:6-7位有效数double:15-16位有效数decimal:不是基础数据类型,精...

  • 计算分数的浮点数值(2.1.5)

    计算分数的浮点数值 【题目描述】两个整数a和b分别作为分子和分母,既分数ab,求它的浮点数值(双精度浮点数,保留小...

网友评论

      本文标题:数值计算day1-计算机中的浮点数;误差;数学基础

      本文链接:https://www.haomeiwen.com/subject/seeurctx.html