a、b を n 桁の 2 つの整数とする。a の 2 乗の計算時間は a*b よりも短いのでしょうか。
ご協力ありがとうございました。
x86でIMULを使用せずにAを2乗する方法はないと思います。私は間違っているかもしれません。
何かにかかる時間を調べるには、マイクロベンチマークを行ってください!
編集:ああ待って、私はそれを手に入れました!a b は 2 回のメモリ読み取りを行い、a a は 1 回の読み取りを行います! したがって、a*a の方が高速です :-)。
正しい答え: 何か影響を与える外部要因がない限り、a*b が遅くなる理由はありません。
あなたの質問は次のとおりだと思います:
*a、b を n 桁の 2 つの整数とする。a の 2 乗を計算する計算時間は、a*b.* を計算する計算時間よりも短いのではないかと考えています。
n が十分に大きく、単一の乗算命令だけを使用できない場合、私が知っているアルゴリズムは、両方の因数が同じであるという事実を利用できます。これは、学校で学んだアルゴリズムにも当てはまります。数字のペアの積のほぼ半分は乗算する必要がないからです。非常に大きな n の極端な場合、FFT で畳み込みを使用すると、両方の係数の FFT は 2 乗で同じになり、1 回だけ計算する必要があります。
Bentley の "Programming Pearls" のベンチマークを見てみましょう。そこから何かをハックして測定することができます。