苦行僧 发表于 2014-4-22 12:12:06

51要计数浮点和一个16位数的乘法,怎么破..........

8位的51,要计算一个16位整数和一个比较小的小数(0.03XXXXXXX)的乘法,
我是直接乘呢还是有什么方法可以提供一下效率啊,小数太小,放大太多怕溢出啊
乡亲们,求支招

zeta1989 发表于 2014-4-22 12:44:22

数据结构学的还记得不?高精度乘法

霸气侧漏 发表于 2014-4-22 12:48:14

楼上的正解用数据结构的思想来弄

苦行僧 发表于 2014-4-22 16:01:30

zeta1989 发表于 2014-4-22 12:44
数据结构学的还记得不?高精度乘法

额...这个还真没看过
待我去学学{:lol:} 谢谢指导

mhw 发表于 2014-4-22 16:06:47

最简单的是用数组来表示数据和小数点,然后模拟笔算……

sdxjgby 发表于 2014-4-22 21:45:07

记得廖老师的一本书里有介绍四字节浮点运算,我认为很好,楼主可查一下。

sdxjgby 发表于 2014-4-22 22:02:10

上面说错了,应该是周航慈老师的,现在玩工控多搞混了。

苦行僧 发表于 2014-4-23 00:25:41

sdxjgby 发表于 2014-4-22 22:02
上面说错了,应该是周航慈老师的,现在玩工控多搞混了。

请问一下是什么书啊
我现在的做法就是将小数的各个位取出
然后用各个位去乘那个整数,再叠加
最后能得到我要的结果,不知道这样做有没有提高效率
好像这样改之后代码量少了一点

alfred1 发表于 2014-4-23 01:46:47

1.查表法
2. 移位法
3.定点法

zhugean 发表于 2014-4-23 08:38:57

给你一个绝好的办法,也是汇编里常用的做法,先用0.3xxx * 65536得到A,然后用A乘16位整数,得到4字节数,最高两个字节就是结果

elec2000 发表于 2014-4-23 09:07:03

zhugean 发表于 2014-4-23 08:38
给你一个绝好的办法,也是汇编里常用的做法,先用0.3xxx * 65536得到A,然后用A乘16位整数,得到4字节数, ...

定点运算的好方法

苦行僧 发表于 2014-4-23 17:13:31

zhugean 发表于 2014-4-23 08:38
给你一个绝好的办法,也是汇编里常用的做法,先用0.3xxx * 65536得到A,然后用A乘16位整数,得到4字节数, ...

也就是先放大,取高两个字节就是右移16位,相当于除65536
恩,我现在好像也是这么做的,不过我是放大1000000倍,把小数的各个位取出来了再做乘法,不知道这样效率是有没有比直接两个整数相乘高一点

czhcc12 发表于 2014-5-8 08:45:15

转成浮点计算呢,这个不错的

unifax001 发表于 2014-5-14 14:18:27

int a;
double b,c;
c=a*b;
会出错吗?
页: [1]
查看完整版本: 51要计数浮点和一个16位数的乘法,怎么破..........