0

現代のほとんどの ISA における分割の Big-O は何ですか? 何らかの最適化がありますか、それとも単純な O(分子/分母) ですか? モジュラス演算に大きく依存するコードを書いています。

たとえば、10/5 と 20/5 と 40/5 を実行するのにかかる相対時間は? Intel、nVidia、Qualcomm などの最新のプロセッサは、分割用に同じ Big-O を持っていますか?

注: 除算が O (分子のサイズ) であると仮定すると、ここで間違っている可能性があり、この質問はまったく意味をなさない可能性があります。その場合は修正してください。

4

3 に答える 3

2

この質問はあまり良くありません。しかし、それはそれほど「ばかげている」わけでもないので、いくつかの点について/明確に答えようとします。

最近のほとんどすべての CPU/GPU には除算命令があります。デフォルトのワードサイズで動作するため、Big-O に関しては一定であるため、どれだけ高速であっても、常に O(1) です。除算命令を持たない組み込みプロセッサ、マイクロコントローラなどの場合でも、ソフトウェアでエミュレートされ、ソフトウェア エミュレーションはワードのサイズに制限されているため、除算を実行するのに常に一定の時間がかかるため、これは当てはまります。操作 (つまり、O(1) も意味します)。

例外は、ワード サイズ以外のデータに対して実行される操作について話す場合です。これは、たとえば BigInt ライブラリについて話しているときに発生します。しかし、この場合、すべての演算 (加算、乗算など) はもはや O(1) ではなく、数値のサイズに依存します。

ただし、注意: Big-O は実際の計算時間については何も言いません。一定の要因を無視した漸近的な動作です。つまり、O(n) を取る 2 つのアルゴリズムがある場合でも、時間差は 1000 倍 (または 100 万倍など) になる可能性があります。除算の最良の例: たとえば、加算は両方とも O(1) ですが、通常、除算は加算よりも実行にはるかに多くのサイクル/時間がかかります。

于 2013-01-18T09:35:00.223 に答える
0

バイナリ除算を使用して独自の実装を作成することもできますが。 https://www.youtube.com/watch?v=TPVFYoxna98

以前の投稿によると、ほとんどのプロセッサの最適化は実際にははるかに高速になると思います。実際に確認するには、作成したバイトコードを確認する必要がありますが、おそらくプロセッサキャッシュに物を入れる必要があるため、これを最善の解決策として使い続けました。

int a = ... int b = ...

int 商 = a / b; int 剰余 = a - (商 * b);

つまり、a=5、b=2 商: 2 剰余: 1

ここから(エラーがありますが:)-); Java - 同じステップで商と余りを取得しますか?

于 2022-02-16T22:11:25.417 に答える