2
%演算子よりも速い分割可能性テスト?
コンピューターに不思議なことに気づきました。*手書きの分割可能性テストは、%オペレーターよりも大幅に高速です。最小限の例を考えてみましょう: * AMD Ryzen Threadripper 2990WX、GCC 9.2.0 static int divisible_ui_p(unsigned int m, unsigned int a) { if (m <= a) { if (m == a) { return 1; } return 0; } m += a; m >>= __builtin_ctz(m); return divisible_ui_p(m, a); } 例は奇数aとによって制限されm > 0ます。ただし、すべてのaおよびに簡単に一般化できますm。コードは除算を一連の追加に変換するだけです。 でコンパイルされたテストプログラムを考えてみましょう-std=c99 -march=native -O3: for (unsigned …