当前位置: 技术问答>linux和unix
求一个将乘法转成一个加法或其他耗时更小的表达式?
来源: 互联网 发布时间:2016-03-24
本文导语: 我现有一个这样的表达式: #define AD2V(var) (((var) ^ 0x8000) * 10000.0 / 0x8000 - 10000.0) /*var 是一个unsigned short或unsiged long的数*/ 我想把哪乘法和除法转化成耗时更小的表达式,比如移位!因为听说我用的哪个arm处理...
我现有一个这样的表达式:
我想把哪乘法和除法转化成耗时更小的表达式,比如移位!因为听说我用的哪个arm处理器处理乘法或除法比较耗时,而我最高时每秒要进行200k次这要的计算,这时还要做其他发送,存储,采集等任务!
我曾经这样做过:
没有通过,后来我把换成long long,VC下编译没有通过,linux下还没试!
只要比现在的这个用时少就有分,测试通过加分!
#define AD2V(var) (((var) ^ 0x8000) * 10000.0 / 0x8000 - 10000.0)
/*var 是一个unsigned short或unsiged long的数*/
我想把哪乘法和除法转化成耗时更小的表达式,比如移位!因为听说我用的哪个arm处理器处理乘法或除法比较耗时,而我最高时每秒要进行200k次这要的计算,这时还要做其他发送,存储,采集等任务!
我曾经这样做过:
#define AD2V1(var) ((((unsigned long)(var) ^ 0x8000) >> 15 ) * 10000.0 - 10000.0)
没有通过,后来我把换成long long,VC下编译没有通过,linux下还没试!
只要比现在的这个用时少就有分,测试通过加分!
|
估计不好写,因为arm的乘除转加减是由编译器做的,一般都针对于特定的指令芯片做了优化。关键是arm上没有浮点协处理器。
#define AD2V1(var) ((((unsigned long)(var) ^ 0x8000) >> 15 ) * 10000.0 - 10000.0)
这个在linux gcc及armlinux-gcc下都能编译通过.
#define AD2V1(var) ((((unsigned long)(var) ^ 0x8000) >> 15 ) * 10000.0 - 10000.0)
这个在linux gcc及armlinux-gcc下都能编译通过.
|
vc下用int64。
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。