回答編集履歴

1

実行時間を調べた

2019/12/21 18:33

投稿

ikadzuchi
ikadzuchi

スコア3047

test CHANGED
@@ -4,6 +4,16 @@
4
4
 
5
5
  そうだと思います。
6
6
 
7
- (任意の数の)冪乗の計算は非常に遅い命令です。Goの実装は知りませんが、素直に浮動小数点数の冪乗命令を呼んでいるなら、結果に疑問はありません。
7
+ (任意の数の)冪乗の計算は非常に遅い命令です(※)。Goの実装は知りませんが、素直に浮動小数点数の冪乗命令を呼んでいるなら、結果に疑問はありません。
8
8
 
9
9
  たぶんこれはシフトで済みますよね?
10
+
11
+
12
+
13
+
14
+
15
+ 2^X-1を計算するF2XM1命令というのがあって、まあ素直に考えるとこの命令を使うことになるのですが、これがこちらの表によると例えばSkylakeで実行に65-80クロック掛かるようです(レイテンシ)。
16
+
17
+ [https://www.agner.org/optimize/instruction_tables.pdf](https://www.agner.org/optimize/instruction_tables.pdf)
18
+
19
+ 実際には冪乗の計算はこの命令を使わずにする方法もあるようですが、まあそれで格段に速くなるということもないでしょう。