《深入理解计算机系统》问题,乘法溢出问题?

您所在的位置:网站首页 定点数运算判断溢出有三种方法 《深入理解计算机系统》问题,乘法溢出问题?

《深入理解计算机系统》问题,乘法溢出问题?

2023-03-23 09:59| 来源: 网络整理| 查看: 265

发现原来的答案有些误人子弟,重新修改了一下答案。

先暂不考虑乘法运算 *_{w}^{t} ,单纯考虑数学上的乘法运算 * 。

定义向量集合: V = \left\{ \vec{v} \in R_{}^{1\times w} | v_{i}^{} \in \left\{ 0,1 \right\} ,i\in\left[ 0,w \right)\cap Z_{}^{+} \right\}

\forall x\in\left\{ int类型能表示的所有数 \right\},\exists \vec{x} \in V与之唯一对应。 实际上 \vec{x} 即为 x 的二进制形式,记为一行向量。

对于乘法运算 *,有 x * y = y * \sum_{i=1}^{w}{\vec{x}_{i}^{} * 2_{}^{i-1}} = p + m

式子看起来很复杂,实际上只是小学乘法运算的竖式分解。本应该 用int类型来作运算,但是为了避免麻烦,改用unsigned类型,不影响结论。

令w = 8 ,取\vec{x} = (1,0,0,0,0,0,0,1),\vec{y}=(0,0,0,1,1,0,0,1)\\ 即(unsigned)x = 129,y = 25,x * y = 3,225 = 0xC99‬\\ \space\space\space1000\space0001 \\ *0001\space1001\\ ------------\\ \space\space\space1000\space0001\\ 0\space0000\space000\space\space\\ 00\space0000\space00\space\space\space\space\space\space\\ 100\space0000\space1\space\space\space\space\space\space\space\space\space\space\\ 1000\space0001\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\\ ------------\\ 1100\space1001\space1001\space\space\space\space\space\space\\ 即为0xC99

考虑乘法运算 *_{w}^{t} ,令 p = x *_{w}^{t} y ,即 p 为 x * y 结果最低的w位,即 0x99 。 故m = x * y - p = t*2_{}^{w} ,有 m = (1100\space0000\space0000)_{2}^{} = ((1100)_{2}^{} * 2_{}^{8}) = (1100)_{2}^{}



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3