C/C++ 移位计算代替乘除运算
测试移位和乘除的比较,发现移位比乘除运算快一个位数的速度,但是难点在于判断是否是2的幂次级的数,如果不是还得通过代码拆分到2的幂次+上分子的累和,然后通过移位得到2的次幂数这样;
下列代码只是简单的判断是幂级数则移位运算,不是则正常计算,不是完全都是移位算,(之后如果找到方法判断更快在更新)
C/C++:
1 #include <iostream> 2 3 4 5 uint64_t Multiply_Dived(uint64_t member, uint64_t denominator, char style) 6 { 7 //判断分母是否是2的次幂 8 if (denominator & (denominator - 1)) 9 { 10 if (style == '*') 11 { 12 while ((denominator >>= 1) != 1) 13 { 14 member <<= 1; 15 } 16 17 } else 18 { 19 while ((denominator >>= 1) != 1) 20 { 21 member >>= 1; 22 } 23 24 } 25 return member; 26 } 27 28 if (style == '*') 29 { 30 return member * denominator; 31 } else 32 { 33 return member / denominator; 34 } 35 } 36 37 uint64_t Nomorl(uint64_t member, uint64_t denominator, char style) 38 { 39 if (style == '*') 40 { 41 return member * denominator; 42 } else 43 { 44 return member / denominator; 45 } 46 } 47 48 49 int main() 50 { 51 std::clock_t start = 0, stop = 0; 52 start = clock(); 53 for (uint64_t i = 0; i < 100000000; i++) 54 { 55 Multiply_Dived(1, 100, '/'); 56 } 57 stop = clock(); 58 std::cout << "除移位运行时间: " << ((double) (stop - start) / CLOCKS_PER_SEC) << std::endl; 59 60 61 62 63 start = clock(); 64 for (uint64_t i = 0; i < 100000000; i++) 65 { 66 Nomorl(1, 100, '/'); 67 } 68 stop = clock(); 69 std::cout << "正常除运行时间: " << ((double) (stop - start) / CLOCKS_PER_SEC) << std::endl; 70 71 return 0; 72 }
转载于:https://www.cnblogs.com/xuaidongstdudyrecording/p/7103733.html
C/C++ 移位计算代替乘除运算相关推荐
- 简单计算器 (实数计算 先乘除后加减)
模拟简单运算器的工作.实现加减乘除计算表达式输出正确结果(保留 2 位小数). 输入格式: 输入在一行中给出一个四则运算算式,没有空格,且至少有一个操作数.遇等号"="说明输入结束 ...
- 灵魂拷问:用移位来代替除法运算真的效率高吗?Java 编译器到底有没有做除法优化?
目录 引入 C++ 编译器对除法的优化 Java 编译器对除法的优化 移位运算对应的字节码 除法操作对应的字节码 查看及分析 JIT 即时编译结果 1.手动编译 OpenJDK 2.编译 hsdis- ...
- 2---理解正余弦、复数求模、反正切和乘除运算的CORDIC算法实现
CORDIC(Coordinate Rotation Digital Computer)算法是J.Volder在1956在航空控制系统设计中构思的,但其实相似的算法在更早的1624年就已经被Henry ...
- 用yacc编写的算术运算计算器_如何用纯机械实现乘除运算,这是个问题
在步进计算器诞生之后的两百多年中,机械计算之曲始终在莱布尼茨定好的基调上演奏.不难发现,两百年中的制造工艺在不断进步,机器的可靠性也不断提高,而计算原理却始终没有改进.尽管各路"莱系&quo ...
- html输入公式得到混合运算结果,excel表格如何用公式计算加减乘除混合运算-excel乘法如何计算,excel函数怎么计算乘法...
Excel支持数学中的四则运算,直接在目标单元格写相应的公式即可.例百如求A1减B1的差,在C1单元格可输入:=A1-B1 需注意: Excel里面任何公式(包括数学四则运算)都是需要以等号度开头. ...
- 3D Cube计算引擎加速运算
3D Cube计算引擎加速运算 华为达芬奇架构的AI芯片Ascend910,同时与之配套的新一代AI开源计算框架MindSpore. 为什么要做达芬奇架构? AI将作为一项通用技术极大地提高生产力,改 ...
- C语言编程学习:写的秒速计算四则混合运算项目
C语言是面向过程的,而C++是面向对象的 C和C++的区别: C是一个结构化语言,它的重点在于算法和数据结构.C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到输出(或实现 ...
- java位移运算真的比乘除运算快吗?
刚学了位移运算,发现乘除在乘数或除数是2的几次幂数时可以用位移运算替换,并且网上都说位移运算效率高时,好奇究竟快多少便做了如下测试: public static void main(String[] ...
- 汇编语言-010(循环移位ROL,ROR 、进位循环进位RCL,RCR 、有符号数溢出 、双精度移位SHLD,SHRD、SHL和ADD计算 、位运算应用)
1 :循环移位ROL,ROR,带进位循环进位RCL,RCR .386 .model flat,stdcall.stack 4096 ExitProcess PROTO,dwExitCode:DWORD ...
最新文章
- python gui编程框架添加工具栏_python gui编程,我是初学者。用tk,制作下拉菜单的command不分我想打开另一个界面。如和解决,求解!!...
- 如何在实际中计划和执行一个机器学习和深度学习项目
- 【0521模拟赛】小Z爱数学
- BabyXor flower逆向寒假生涯(19/100)
- mybatis配置文件不在resources目录下时需进行的额外配置方法
- python 三引号_Python 基础(一):入门必备知识
- 计算机网络英文题库,强烈推荐计算机网络英文试题库(附答案)chapter.doc
- 针对ArcGIS Server 跨域问题的解释
- ArchLinux(2013)中的网络配置和静态IP时DNS刷新的解决方法
- 《程序设计技术基础》第1-5章例程
- paip.提升用户体验---显示密码控件ShowPwdController
- c语言弹窗代码,pc端点击弹窗代码
- 2020.07.01-07.15学习小结
- 书摘---创业36条军规2:创业的三大条件
- Android性能优化(一):APP启动优化
- uva 10859 放置街灯--Placing Lampposts
- 简单阅读golang的net/http包和Negroni的源码
- [软件分享]Bandizip(有史以来最好的压缩软件)「v1.0」
- 如何从0开始撰写一篇CS论文?(内附写作流程图)
- 什么是环回接口(Loopback Interface、环回地址)