找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 936|回复: 7
打印 上一主题 下一主题
收起左侧

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

[复制链接]
跳转到指定楼层
楼主
ID:709761 发表于 2022-5-31 17:36 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
浮点数小数点移位问题
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:883242 发表于 2022-5-31 18:30 | 只看该作者
C51库里面已经是最优解了,没法更快。
回复

使用道具 举报

板凳
ID:962286 发表于 2022-5-31 18:34 | 只看该作者
X * (1024 - 24) = X * 1024 - X * 24 = (X << 10) - ( (X <<3) *3)
这样可以吗?应该还有更好的办法。
回复

使用道具 举报

地板
ID:883242 发表于 2022-5-31 19:22 | 只看该作者
MCU_FANS 发表于 2022-5-31 18:34
X * (1024 - 24) = X * 1024 - X * 24 = (X

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

使用道具 举报

5#
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运算)
回复

使用道具 举报

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

使用道具 举报

7#
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更慢,代码数量更多。
回复

使用道具 举报

8#
ID:962286 发表于 2022-6-2 10:05 | 只看该作者
Hephaestus 发表于 2022-5-31 19:22
不行,你的办法针对整数是好用的。但是浮点数移位可没那么简单。

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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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