找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1363|回复: 7
收起左侧

浮点数*1000 用什么方法提高运算效率,比如移位运算?

[复制链接]
ID:709761 发表于 2022-5-31 17:36 | 显示全部楼层 |阅读模式
浮点数小数点移位问题
回复

使用道具 举报

ID:962286 发表于 2022-6-2 10:05 | 显示全部楼层
Hephaestus 发表于 2022-5-31 19:22
不行,你的办法针对整数是好用的。但是浮点数移位可没那么简单。

我审题太马虎。浮点数移位行不通,有些平台浮点数移位甚至直接报错。
回复

使用道具 举报

ID:883242 发表于 2022-5-31 21:11 | 显示全部楼层
cdhigh 发表于 2022-5-31 19:24
只有整数才可以移位,楼主要求的是浮点数乘以1000。
而且你的分解里面还是有一个乘以3,和乘以1000没区 ...

你说得对,我查了下4.5e6和4.5e9的IEEE754单精度格式,x1000的过程是把阶码(Exponent)加10,相当于x1024,然后把尾码(Mantissa)除1.024。那么x3大概是把阶码加2,把尾码除1.5。

也就是说x1000和x3的工作量是一样的,板凳的代码比直接x1000更慢,代码数量更多。
回复

使用道具 举报

ID:624769 发表于 2022-5-31 20:35 | 显示全部楼层
浮点数 里面存的是 2进制 浮点, 如果你说 *4, 或者 *256   *1024 之类的,可以操作指数位,来改变大小。
回复

使用道具 举报

ID:67925 发表于 2022-5-31 19:24 | 显示全部楼层
MCU_FANS 发表于 2022-5-31 18:34
X * (1024 - 24) = X * 1024 - X * 24 = (X

只有整数才可以移位,楼主要求的是浮点数乘以1000。
而且你的分解里面还是有一个乘以3,和乘以1000没区别,
除非你用汇编直接实现,否则C语言编译出来的代码是一样的(*3和*1000都会转换为int运算)
回复

使用道具 举报

ID:883242 发表于 2022-5-31 19:22 | 显示全部楼层
MCU_FANS 发表于 2022-5-31 18:34
X * (1024 - 24) = X * 1024 - X * 24 = (X

不行,你的办法针对整数是好用的。但是浮点数移位可没那么简单。
回复

使用道具 举报

ID:962286 发表于 2022-5-31 18:34 | 显示全部楼层
X * (1024 - 24) = X * 1024 - X * 24 = (X << 10) - ( (X <<3) *3)
这样可以吗?应该还有更好的办法。
回复

使用道具 举报

ID:883242 发表于 2022-5-31 18:30 | 显示全部楼层
C51库里面已经是最优解了,没法更快。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表