0

最近、% 演算子は時間的にコストがかかると聞きました。

問題は、剰余をより速く見つける方法があるかどうかです。

また、% / * + - 操作の実行の違いを誰かが教えていただけると助かります。

4

2 に答える 2

0

2 の累乗の除数を使用している場合、剰余を計算する独自のロール テクニックを使用する方が適切な場合もありますが、一般的には中途半端なコンパイラが可変除数または「奇数」除数で可能な限り最善の仕事をします。どのパターンにも当てはまらない。

いくつかの CPU には乗算演算さえないため、(それらの) 乗算は加算に対して非常に遅いことに注意してください (32 ビット乗算の場合、少なくとも 64x)。(ただし、乗数がリテラルの場合、スマート コンパイラはこれを改善する可能性があります。) わずかに大きい数では、除算操作がないか、かなり遅い操作になります。(高速な乗算器を備えた CPU では、乗算は加算よりも 4 倍程度遅くなる場合がありますが、「通常の」ハードウェアでは、32 ビット操作で 16 ~ 32 倍遅くなります。除算は乗算より本質的に 2 ~ 4 倍遅くなります。ただし、一部のハードウェアでは非常に遅くなる可能性があります。)

剰余演算がハードウェアに実装されることはめったになく、通常A % Bは次のようなものにマップされますA - ((A / B) * B)(適切な符号を保証するためにいくつかの追加演算が必要になる場合があります)。

(私は、70 年代初頭にRCA/NASA 用の SUMC コンピューターの命令セットをマイクロプログラミングしているときに、このことについて学びました。)

于 2013-08-24T12:55:08.897 に答える
0

いいえ、コンパイラは可能な限り最も効率的な方法で % を実装しようとしています。

速度に関しては、+ と - が最も高速です (通常は同じハードウェアで同じように高速です)。

*、/、および % は非常に遅くなります。掛け算は、基本的に小学校で習う方法で行います。最初の数に 2 番目の数のすべての桁を掛けて、その結果を足します。バイナリによって可能になったいくつかのハッキング。数年前の時点では、乗算は加算よりも 3 倍遅くなりました。除算は乗算に似ている必要があります。剰余は除算に似ています (実際、通常は両方を一度に計算します)。

正確な違いは、CPU の種類と正確なモデルによって異なります。特定のマシンの CPU スペック シートでレイテンシを調べる必要があります。

于 2013-08-24T09:57:27.100 に答える