跳转至

Chapter 3 | Arithmetic for Computer

约 926 个字 40 张图片 预计阅读时间 5 分钟

3.1 Introduction - 数值表达 -

3.2 Signed and Unsigned Numbers - Possible Representations

  • 溢出

3.3 Arithmetic--Addition & Subtraction and ALU

  • CLA
  • 行波

3.4 Multiplication

3.5 Division

3.6 Floating point numbers

image-20240306223108682

image-20240306223509613

Introduction

  • 一个数字只是一个数字,未指明含义它并不表征任何意义

image-20240312165004533

Arithmetic

image-20240312165144314

overflow

$OverFlow = C_{n} \oplus C_{n-1}$

image-20240312185026542

image-20240312191301238

Delay的计算

这里跟数字逻辑的基本相同

image-20240510183616936

CLA

image-20240510184007561

image-20240510184057455

Multiplication

Multiplicand=被乘数

Multiplier=乘数

  • 乘法不能用补码操作

V1

  • 不断移动位置(左移动),做加法
  • 移动被乘数
  • 对乘数的最后一位判断,是1,结果加上当前的被乘数

image-20240312195956267

V2

  • 不移动被乘数,而是移动乘积product
  • 对于128bits的product,高64bits进行算术运算,然后不断右移

image-20240312195752959

example

image-20240510190901115

V3

  • 之前V2里面的Product低64bits没有任何用处,这里用来装乘数,使之右移移除的bit进行判断

image-20240312200527853

  • 129bits是为了保存进位(个人感觉用不到啊

有符号乘法

  • 记录符号,转为绝对值相乘

Booth Algorithm

适用于式子中1比较多的情况,将多的加法转换为shift(左到右的序列)

根据相邻的两个bits判断对这一位要做什么操作,±被乘数

  • 与上面的思想类似,在一个寄存器左半部分,右半部分 分别 放置 Result,乘数;每次根据乘数最低位的序列对Result部分进行操作,比如 add 被乘数;
  • 需要注意的是,计算这个序列是从 -1 位(默认为0)开始的
  • shift操作每次都要进行 11、00 的情况相当于operation环节是空的

image-20240312201717153

image-20240312201709567

image-20240312201848223

Example

image-20240312204028709

image-20240312203417014

Division

Dividend=被除数,

Divisor=除数

Quotient 商

image-20240311142246915

V1

image-20240311142420751

  • 除数最开始在Divisor左64bits,被除数在Remainder右64bits,

Note

image-20240311143852286

V2

改进

  • 除数不动,被除数左移,进行计算,小于零则回退,左移remainder置0;大于零左移remainder置1

  • shift right 针对的是最后一步,把余数部分的结果右移1bit

example

  • 注意最后一步

image-20240317215819530

有符号除法

image-20240317220036596

  • remainder 高位,符号由被除数决定
  • 低位 商
  • Overflow and division-by-zero don’t produce errors
  • Just return defined results
  • Faster for the common case of no error

Floating point Numbers

image-20240317220442408

  • 单精度 float 1 + 8 + 23
  • 双精度 double 1 + 11 + 52

为了节省符号位的空间,exponent我们都加上了一个biased

$$ 于是可以表示: (-1){sign}(1+significand)*2 $$

image-20240317221248926

Range

Exponents

  • 00000000 and 11111111 reserved

image-20240317222259589

image-20240317222514753

精度

image-20240317222225083

计算精度与小数位数相关

加法

  • Alignment 对齐 一般由较小的数向大的变
  • The proper digits have to be added
  • Addition of significands
  • Normalization of the result 归一化处理
  • Rounding 进位

image-20240317223335199

Algorithm

example

image-20240317223843919

image-20240317224424583

乘法

image-20240317224822328

  • 记得exponent部分相加之后减去一个 bias
  • $y={exponent - bias},y_1+y_2=ex_1+ex_2-2bias,ex_1+ex_2=y+2bias$

image-20240317224909204

IEEE 拓展 精确算术运算

image-20240321094206216

注意!

这个Blog定义的概念跟课本上的不一致

  • Blog

  • 这些bits的作用是在运算过程中保留精度便于之后进位损失的精度不超过0.5ulp

  • sticky bit 在Round bit之后的所有位中只要有1就存为1,这个bit不一定要用到,是为了检测类似2.500000000与2.500000001的区别
  • Guard bit 要保留的最低位之后的第一位
  • Round bit
  • 舍入规则:
  • 如果guard bit是0,那么直接截断。
  • 如果guard bit是1且round bit或sticky bit至少一个是1,那么向上舍入(加1至尾数的最后一位)。
  • 如果仅仅guard bit是1,那么执行向偶数舍入(如果尾数的最后一位是0则不变,如果最后一位是1则加1)。

题目

浮点数计算

image-20240510210024267

Answer

image-20240510210201785

image-20240510210659311

image-20240510210338244

Answer

image-20240510213038403 如果先计算后两个数,结果会发生变化,因为中间过程的GRTbit发生了变化,导致保持的精度变化