assembly - 浮点加法组装算法
问题描述
我正在尝试为 picoblaze 微控制器编写二进制 8 位浮点加法算法(1 个符号位、4 个指数位和 3 个尾数位)
我让它与正数一起工作,但当也有负数时我不知道该怎么做。
我的主要问题是设置结果的符号位,有人可以解释如何正确设置吗?
我的想法是检查两个数字的符号;然后如果它们都是正数,则将符号设置为 0,如果它们都是负数,则将符号设置为 1,并使用与之前相同的方法进行加法,如果一个是负数,一个是正数,则比较数字并使用较大的一个符号位,但我不知道如何比较这两个数字,代码变得有点混乱,有没有更好的方法呢?
解决方案
一般来说(忽略 NaN 之类的东西),对于A = B + C
:
if
C
的量级大于B
, 交换B
,C
这样你就知道它B
必须具有“更大或相等”的量级。注意:幅度忽略符号位(例如,-6 的幅度大于 +4,因为 6 > 4)。if
B
和C
有不同的符号,否定C
和做subtract_internal
;否则做add_internal
。对于
subtract_internal
,忽略符号位,减去幅度(不要忘记B
必须具有“更大或等于”幅度),然后将符号设置为A
等于B
或的符号C
(无论如何它们将具有相同的符号)。对于
add_internal
,忽略符号位,添加幅度,然后将符号设置为A
等于B
或的符号C
(无论如何它们将具有相同的符号)。
此外,一般来说(忽略 NaN 之类的东西),对于A = B - C
:
如果
C
幅度大于B
,则交换B
并C
否定它们(例如A - C == (-C) - (-A)
),以便您知道它B
必须具有“更大或相等”的幅度。if
B
和C
有不同的符号,否定C
和做add_internal
;否则做subtract_internal
。
推荐阅读
- java - 你如何实现 mongoTemplate.findDistinct()?
- javascript - R shiny app, making a log that scrolls down automatically
- c++ - 尝试重新分配内存时出现写访问冲突
- python - 无法创建 PMMLPipeline
- javascript - 更新使用 Pm2 作为 Windows 服务启动的 Nodejs 应用程序
- java - Java语言的战舰游戏
- flutter - 颤振设置状态不更新底页函数中的变量值
- phpunit - Codeception - 二级深层文件夹中的空覆盖
- wordpress - 设置 wordpress 多区域站点
- django - 如何在 Django 2 中处理创建的条形码图像?