标题: 浮点数*1000 用什么方法提高运算效率,比如移位运算? [打印本页]

作者: 李冬    时间: 2022-5-31 17:36
标题: 浮点数*1000 用什么方法提高运算效率,比如移位运算?
浮点数小数点移位问题

作者: Hephaestus    时间: 2022-5-31 18:30
C51库里面已经是最优解了,没法更快。
作者: MCU_FANS    时间: 2022-5-31 18:34
X * (1024 - 24) = X * 1024 - X * 24 = (X << 10) - ( (X <<3) *3)
这样可以吗?应该还有更好的办法。
作者: Hephaestus    时间: 2022-5-31 19:22
MCU_FANS 发表于 2022-5-31 18:34
X * (1024 - 24) = X * 1024 - X * 24 = (X

不行,你的办法针对整数是好用的。但是浮点数移位可没那么简单。
作者: cdhigh    时间: 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运算)
作者: 188610329    时间: 2022-5-31 20:35
浮点数 里面存的是 2进制 浮点, 如果你说 *4, 或者 *256   *1024 之类的,可以操作指数位,来改变大小。
作者: Hephaestus    时间: 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更慢,代码数量更多。
作者: MCU_FANS    时间: 2022-6-2 10:05
Hephaestus 发表于 2022-5-31 19:22
不行,你的办法针对整数是好用的。但是浮点数移位可没那么简单。

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




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1