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可能有优化?这个不敢确定


    推荐阅读