c++中怎样优化除法

不想用“/”做除法,有没有比它更节省资源的除法函数,我现在只有利用移位方法支持int的除法的,有没有支持double类型的除法函数?
...全文
949 13 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
taodm 2006-12-19
  • 打赏
  • 举报
回复
如果你的对精度要求不高,用整数运算代替。如果对精度有要求,你的优化怎么也赶不上编译器的优化能力。
Jedimaster 2006-12-19
  • 打赏
  • 举报
回复
嵌入ASM代码SSE优化
axx1611 2006-12-18
  • 打赏
  • 举报
回复
开玩笑吧~~ 你再怎么写也没FPU的速度快~~
省省吧
glsensor 2006-12-18
  • 打赏
  • 举报
回复
所有的优化都是有针对性的,没有万能的优化(指变量除法,常量除法你自己先算好再乘不就得了),不然cpu的除法指令早就被摘除了。
runrunrun 2006-12-18
  • 打赏
  • 举报
回复
double也支持移位的除法吧。只要把阶码值改一下就行了
FantasyNES 2006-12-18
  • 打赏
  • 举报
回复
除法太慢了。既然可以轉化成乘法和移位爲啥不用呢?
zenny_chen 2006-12-18
  • 打赏
  • 举报
回复
现在PC的CPU上有除法器,执行起来非常快。
在Analog Device公司的Blackfin DSP处理器上虽然没有除法器,但也只需16个指令周期。
所以只要不要使用过度还不太会影响效率。

这里提供一个仅执行一次除法就能同时得到商和余数的宏,可用于i386及其兼容机,VC++环境下可进行编译。

#include <iostream>

using namespace std;


// dividend, divisor, quotient and remainder should be replaced with variables
//instead of constant number

#define GET_DIV_AND_MOD(dividend, divisor, quotient, remainder)\
__asm{\
__asm push eax\
__asm push edx\
__asm mov eax, dword ptr[dividend]\
__asm cdq\
__asm idiv dword ptr[divisor]\
__asm mov dword ptr[quotient], eax\
__asm mov dword ptr[remainder], edx\
__asm pop edx\
__asm pop eax\
}


void main(void)
{
int a = 9, b = 4;

int quo=0, rem=0;

GET_DIV_AND_MOD(a, b, quo, rem);

cout << "The quo is: " << quo << ", and the rem is: " << rem << endl;
}
roydux 2006-12-18
  • 打赏
  • 举报
回复
牛b人.....


俺记得cpu的除法是建立在加法的基础上的...cpu只支持加法,然后再去衍生减法,乘法,除法.

你不用除法,自己写个cpu指令?
FantasyNES 2006-12-18
  • 打赏
  • 举报
回复
一般來説,浮點數都是可以轉化成整型運算的。
比如乘以0.3,可以這樣做:

x * 0.3 = x * 0.3 * 1024 / 1024 = (x * 307) >> 10

當然這個只是例子,在實際算得時候可以找適當的倍數擴大。
missilery 2006-12-18
  • 打赏
  • 举报
回复
帮你顶一下

浮点数还不知道怎么用二进制表示
OOPhaisky 2006-12-18
  • 打赏
  • 举报
回复
我现在只有利用移位方法支持int的除法的,有没有支持double类型的除法函数?
-------------------------------------------------------------------------------------
我也知道利用移位的方法来支持除法,但是对于浮点类型而言,我不清楚是否有类似的方法,不过个人认为,浮点类型的存储方式更加复杂,所以类似的方法存在的可能性很小,不过这仅仅是个人猜测而已,等待高手给出答案。。。
  • 打赏
  • 举报
回复
支持double类型的除法函数?
cpu本身的除法指令速度都不快
你还想怎么优化?
DonaldKnuth 2006-12-18
  • 打赏
  • 举报
回复
嵌入汇编

65,186

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧