社区
C++ 语言
帖子详情
c++中怎样优化除法
变成熊猫你就老实了是不
2006-12-18 04:47:02
不想用“/”做除法,有没有比它更节省资源的除法函数,我现在只有利用移位方法支持int的除法的,有没有支持double类型的除法函数?
...全文
1027
13
打赏
收藏
c++中怎样优化除法
不想用“/”做除法,有没有比它更节省资源的除法函数,我现在只有利用移位方法支持int的除法的,有没有支持double类型的除法函数?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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类型的除法函数?
-------------------------------------------------------------------------------------
我也知道利用移位的方法来支持除法,但是对于浮点类型而言,我不清楚是否有类似的方法,不过个人认为,浮点类型的存储方式更加复杂,所以类似的方法存在的可能性很小,不过这仅仅是个人猜测而已,等待高手给出答案。。。
珍惜生命远离CPP
2006-12-18
打赏
举报
回复
支持double类型的除法函数?
cpu本身的除法指令速度都不快
你还想怎么优化?
DonaldKnuth
2006-12-18
打赏
举报
回复
嵌入汇编
[原创]X86
C++
反汇编03.
除法
的
优化
使用 imul A 即 把 A * 8086h 的时候 实际运算的值的真值是(8086h 被视为有符号负数,最高位为1,他是取反+1后的值);n = 32+1 = 33 ,乘积 结果表达式为 edx(高32位) eax(低32位) ,右移32位。就到了edx, edx又右移了1位 就是 33,即 直接右移edx,默认已经右移了32位。M = 2^n/C 因为 C 不是的整数次幂 ,因此 M 也不可能是,而且M是个小数。上面没有 sar edx ,n ,代表右移了 32位。
【
C++
】题目解析与
优化
:保留小数位的
除法
运算
在本篇文章
中
,我们将深入分析两道涉及
C++
基本语法 和 数值计算 的题目,旨在全面梳理其题目要求、代码实现、
优化
建议,以及提升代码质量的多种改进方案。本文不仅涵盖 输入输出格式、运算处理 和 异常处理 的详细步骤,还涉及 代码风格统一 的高级技巧,以便读者能深刻理解每道题目的本质,并掌握高质量
C++
编程 的关键概念。 2024.12.3-✍38min
【C/
C++
】空间换时间,使用函数调用的方式间接对
除法
操作进行
优化
【C/
C++
】空间换时间,使用函数调用的方式间接对
除法
操作进行
优化
最近用godbolt看汇编代码时,发现对整型常量作为除数时,编译器会把
除法
操作
优化
成乘法与移位操作,证明见Labor of Division。之后搜了一下,发现
除法
操作的耗时相当的大。 有一篇博文放了某个特定处理器执行不同指令的延时核吞吐量的数据 指令的延时与吞吐量 Instruction latency and throughput 延时(latency)是指一条指令从开始执行到执行结果就绪(可以被另一条指令使用)所花费的时间,以时钟
C++
质因数分解实战:从短
除法
到筛法
优化
本文深入探讨了
C++
中
质因数分解的多种实现方法,从基础的短
除法
到筛法
优化
,详细介绍了算法原理、代码实现及性能对比。通过实际案例展示了如何将质因数分解应用于密码学、算法竞赛等场景,并提供了针对大数分解的高级算法思路,帮助开发者提升编程效率和算法能力。
C++ 语言
65,210
社区成员
250,514
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章