C++的快速乘法算法是否还有用真的能快吗
快速乘法的说法来源于快速幂,因为两者的思想一致。快速幂是为了计算计算取模结果,的确是快的。而快速乘法主要是模数超过九次方时使用,因为两数相乘会longlong溢出,会比直接乘法慢,但是保证了正确性。所以说快速乘法并不快,想要比正常乘法快也是不现实的,快速乘法本来就是为了保证正确性而牺牲效率,自己实现了一遍乘法。要说快的话只能去和直接累加相比,就像快速幂比直接累乘取模快。
■网友
这个其实是龟速乘法,复杂度多一个log
平常的使用c++自带乘法就行了,这个只是为了防止longlong*longlong类型溢出
至于真正的longlong*longlong快速乘法好像要用double黑科技。。。
■网友
谢邀。如果自创乘法能比现代CPU内置的更快的话,乘法器做出来是糊弄人的吗……#include \u0026lt;iostream\u0026gt;using namespace std;inline unsigned BitsGetLow(unsigned x){\t// x86 only\t__asm bsf eax, x}unsigned __fastcall mul1(unsigned a, unsigned b){\tunsigned backup_a = a;\ta = 0;\twhile (b)\t{\t\tunsigned i = BitsGetLow(b);\t\ta += backup_a \u0026lt;\u0026lt; i;\t\tb \u0026amp;= b - 1;\t}\treturn a;}unsigned __fastcall mul2(unsigned a, unsigned b){\tunsigned result = 0;\twhile (b--)\t{\t\tresult += a;\t}\treturn result;}unsigned __fastcall mul3(unsigned a, unsigned b){\treturn a * b;}int main(){\tfor (auto f : { \u0026amp;mul1, \u0026amp;mul2, \u0026amp;mul3 })\t{\t\tfor (int i = 0; i \u0026lt; 100000000; ++i)\t\t\tf(2333, 2333);\t\tcout \u0026lt;\u0026lt; "end" \u0026lt;\u0026lt; endl;\t}}个人认为只有在写大整数乘法的时候这种算法比较高效。
倒是可以稍微改进下,不需要判断每一位,直接每次取最低位就可以了。
■网友
快速乘不是用来应对乘法取模,直接乘会爆,但是加不会吗。。。
■网友
个人认为没有用
原因:CPU自带一个乘法器,理论上不太可能比乘法器还快了,如果真的快intel会来找你的
而且这个东西虽然常数小但是有一个log,性能上还有差距的。
【C++的快速乘法算法是否还有用真的能快吗】 这个可能是早期CPU乘法计算很慢的时候遗留下来的一个坏习惯,和register一样
最后再补充一句,好像对x64系统,long long可能有优化?这个不敢确定
推荐阅读
- 河北煤炭全链条快速抽检能力取得新突破研制仪器填补国内空白
- |看50岁老小区“返老还童”扬州老旧小区改造工程快速推进
- 汽车|冬天怎样让车内温度快速升高?座椅加热的最佳使用方式二,外循环的作用总结
- |南通规划新一轮城市快速路网体系
- 非计算机专业想要利用课余时间深入自学C++,想要找到比较体面的工作大概需要啥水平
- |酒喝多了难受怎么办?教你几招,简单实用,让你快速醒酒,收藏了
- 电商的初级产品经理怎样快速获取需求
- Java工程师和C++工程师在工作上有啥区别哪个更适合自身发展
- 你是怎样快速学习新IT(或者其他)技术(知识)的是先使用起来,还是先学理论知识有没有更好的方式
- 金杯|创业吗朋友?金杯海狮王8.49万带回家魔术空间 岂止于“大”高效便捷、快速致富美“好”品质 舒适加享澎湃动力,“省”心“省”钱
