4

整数のユークリッド除算の剰余を計算する実装またはライブラリはどこにあり0 <= r < |n|ますか?

4

4 に答える 4

6

C++言語のC++98およびC++03バージョンでは、組み込み除算(ビット/および%演算子)はユークリッドである場合と非ユークリッドである場合があります。これは実装定義です。ただし、ほとんどの実装では、商がゼロに向かって切り捨てられます。これは、残念ながら非ユークリッドです。

ほとんどの実装5 / -3 = -15 % -3 = -2。除法の原理5 / -3 = -25 % -3 = 1

C ++ 11では、整数除算が非ユークリッドである必要があります。ゼロに向かって切り捨てる実装が必要です。

ご覧のとおり、この問題は負の数でのみ発生します。%したがって、演算子を使用して負の剰余を後補正することにより、除法の原理を自分で簡単に実装できます。

int euclidean_remainder(int a, int b)
{
  assert(b != 0);
  int r = a % b;
  return r >= 0 ? r : r + std::abs(b);
}
于 2012-07-30T01:58:52.390 に答える
4

(x%m + m)%m結果が正でなければならない場合は試してください

これを中心に独自の関数を作成するか、任意のバリアントを作成してください。ライブラリにとらわれないでください。質問するのに、単にそれを行うよりも多くの時間を費やしてきました。必要な単純な関数のために独自のライブラリ(ツールボックス)を起動します。

于 2012-07-30T02:02:30.757 に答える
3

シンプルなオペレーターです。%。

5 % 4 は 1 など

編集:指摘されているように、実装によっては、これは必ずしもユークリッド mod ではありません。

#define EUCMOD(a, b)  (a < 0 ? (((a % b) + b) % b) : (a % b))
于 2012-07-30T01:54:13.727 に答える