跳转至

Chapter 1 数学基础 | Mathematical Preliminaries

约 1160 个字 1 张图片 预计阅读时间 6 分钟

本讲概述

本讲主要介绍数值计算中的误差类型和误差分析,以及IEEE 754浮点数表示。

1.2 舍入误差和计算机算术 | Roundoff Errors and Computer Arithmetic

1.2.1 截断误差和舍入误差 | Truncation Error and Roundoff Error

  • 截断误差: 使用截断的(或者说有限的)求和来近似无穷级数的和->产生的误差

    • 理论:e=n=01n!e=\sum\limits_{n=0}^{\infty} \frac{1}{n!}

    • 计算机: e=n=0N1n!e=\sum\limits_{n=0}^{N} \frac{1}{n!}

  • 舍入误差: 当计算机执行实数计算时产生的误差。这是因为计算机中的算术运算涉及到的数字只有有限位数。

    • 理论:0.3333333
    • 计算机: 0.333333

1.2.2 截断法和舍入法 | Chopping and Rounding

使用舍入法或截断法产生的误差都叫做舍入误差

  • Chopping: 0.1119 -> 0.111,直接截断
  • Rounding: 0.1119 -> 0.112,四舍五入

函数表示

Given a real number y=0.d1d2d3dkdk+1×10n(which is called Normalized decimal floating-point form of a real number)

fl(y)={0.d1d2d3dk×10n/* chopping */chop(y+5×10n(k+1))/* rounding */

1.2.3 绝对误差与相对误差 | Absolute error and relative error

Denote p as the approximation of p.

  • Absolute error: |pp|
  • Relative error: |pp||p|

近似产生的误差

chopping:

|yfl(y)||y|=0.dk+1dk+2×10nk0.d1d2d3dk×10n=0.dk+1dk+20.d1d2d3dk×10k<10.1×10k=10k+1

Rounding:

|yfl(y)||y|0.5×10nk0.d1d2d3dk×10n=0.50.1×10k=0.5×10k+1

误差产生

  • 两个近乎相等的数相减二导致有效数字的相消,例如:a=0.123456789,b=0.123456788,两者本来有9位有效数字,但是相减后只剩下1位有效数字。
  • 如果有限位的表示或计算产生了误差,则除以一个小数(或者乘以一个大数)会放大绝对误差。

误差计算举例:

Evaluate f(x)=x36.1x2+3.2x+1.5 at x=4.71 using 3-digit arithmetic(3位有效数字).

x x2 x3 6.1x2 3.2x
exact 4.71 22.1841 104.487111 135.32301 15.072
Chopping 4.71 22.1 104. 6.122.1=134.81134. 15.0
Rounding 4.71 22.2 105. 6.122.2=135.42135. 15.1

Exact value: f(4.71)=104.487111135.32301+15.072+1.5=14.263899

Chopping: f(4.71)=104134+15.0+1.5=13.5

  • Relative error: |14.263899+13.5||14.263899|5.35%

Rounding: f(4.71)=105135+15.1+1.5=13.4

  • Relative error: |14.263899+13.4||14.263899|6.06%

可见,有时候舍入误差比截断误差更大。

但现在的误差还是太大了!介绍——秦九韶算法

乘法较多会导致式子的误差较大,此时可以使用秦九韶算法(其实就是不断提取x)来减少乘法的次数。

把一个多项式f(x)=anxn+an1xn1++a1x+a0写成如下形式:

f(x)=(((anx+an1)x+an2)x+)x+a1)x+a0

然后从最内层开始计算。

将上例改写成秦九韶算法:

f(x)=((x6.1)x+3.2)x+1.5

Chopping:

((4.716.1)4.71+3.2)4.71+1.5=(1.394.71+3.2)4.71+1.5=(6.54+3.2)4.71+1.5=3.344.71+1.5=15.7+1.5=14.2

Relative error: |14.263899+14.2||14.263899|0.44%

Rounding:

((4.716.1)4.71+3.2)4.71+1.5=(1.394.71+3.2)4.71+1.5=(6.55+3.2)4.71+1.5=3.354.71+1.5=15.8+1.5=14.3

Relative error: |14.263899+14.3||14.263899|0.25%

可见,此时误差明显减小了。

1.3 算法和收敛性 | Algorithms and Convergence

稳定性 | Stability

一个算法,如果初始数据的小变化会导致最终结果的小变化,则称为稳定(stable);否则称为不稳定(unstable)。

一个算法,如果只有在某些初始数据的选择下才是稳定的,则称为条件稳定(conditionally stable)。

误差增长 | The growth of errors

假设E0>0是初始误差(initial error),En是第n步的误差。

  • 如果EnCnE0,则称为线性增长(linear growth)。

线性增长的误差通常是无法避免的,当CE0都很小的时候,结果通常是可以接受的。

  • 如果EnCnE0,则称为指数增长(exponential growth)。

指数增长的误差应该避免,因为即使E0很小,Cn也会变得很大。这会导致不可接受的不准确性。

收敛速度 | Convergence rate

使用O符号来表示收敛速度。

假设limh0F(h)=Llimh0G(h)=0。如果存在正常数K使得

|F(h)L|K|G(h)|

对于足够小的h成立,则记为F(h)=L+O(G(h))

我们通常取G(h)=hp,(p>0),并对最大的p值感兴趣。

求当h0时下列函数的收敛速度

F(h)=sinhh, limh0sinhh=1

解: F(h)L=sinhh1=sinhhhhh36+o(h3)hhh26K|h2|

所以收敛速度为O(h2)

1.4 IEEE 754 FLOATING POINT REPRESENTATION

二进制的科学计数法:x=±1.d1d2d3dk×2n,这里的di是二进制的数字,1.d1d2d3dk为有效位数(Significand)。

在计算机里有两种表示方法,分别是Single(32位)和double(64位)。均为下图的形式。

二进制

x=(1)S×(1+Fraction)×2ExponentBias
  • S代表符号位(sign bit)。S0表示非负数,S1表示负数。
  • 有效位数(Significand=1+Fraction) 中1是默认的,我们只存储小数点后面的位数(即Fraction)。
  • Fraction 代表尾数部分(也称作mantissa)。
  • Single: 23 bits
  • Double: 52 bits
  • Exponent 表示指数部分(也称作characteristic)。
    • Single: 8 bits
    • Double: 11 bits
    • excess representation(偏移表示法) = actual exponent bias,其中:
      • Single: bias=127 bits
      • Double: bias=1023 bits
    • 指数为全 0 和全 1 时用作特殊值处理

Single & Double的值域

Single的值域

  • 最小值:
  • Exponent = 00000001, Fraction = 000...000
  • x=±(1+0.0)×21127=±1.0×2126±1.2×1038
  • 最大值:

  • Exponent = 11111110, Fraction = 111...111
  • x=±(1+0.111111)×2254127±2.0×2127±3.4×1038

Double的值域

  • 最小值:
  • Exponent = 00000000001, Fraction = 000...000
  • x=±(1+0.0)×211023=±1.0×21022±2.2×10308
  • 最大值:

  • Exponent = 11111111110, Fraction = 111...111
  • x=±(1+0.111111)×220461023±2.0×21023±1.8×10308

Single & Double的十进制精度

Single的十进制精度

  • 最小分度: 223
  • log102236.92
  • 所以约为小数点后六位有效数字

Double的值域

  • 最小分度: 252
  • log1025215.65
  • 所以约为小数点后十六位有效数字

十进制->IEEE754 浮点数

Represent 0.75

  1. Convert to binary: 0.75=0.11
  2. Normalize: 0.11=1.1×21
  3. Sign bit: S=1
  4. Exponent:
    • Single: 1+127=126=01111110
    • Double: 1+1023=1022=01111111110
  5. Fraction:
    • Single: 0.1=10000,共23位
    • Double: 0.1=10000000,共52位 IEEE 754 Representation:
    • Single: 1 01111110 10000
    • Double: 1 01111111110 10000000

IEEE754 浮点数->十进制

What number is represented by the single-precision float 11000000101000…00

  1. Sign bit: S=1
  2. Exponent: E=10000001=129
  3. Actual exponent: E127=2
  4. Fraction: 0100000
  5. Significand: 1.0100000=1.25
  6. Number: 1.25×22=5.0