0

モジュラスのコードを作成しようとしていますが、負の数のコードを作成すると、正しい結果が得られません。コードは次のとおりです。

double mod (double X, double Y)
{
    double result = X;
    if (X>0){
    do
    {
      result =  result - Y;
    }while(result >= Y);
    }

    if (X<0){
    do
    {
      result =  result + Y;
        }while(0 >= result);
    }
}

mod(-5,2)のようなことをすると、-1が返されるはずですが、1が返されます。0より大きくできないのに、なぜ1が返されるのでしょうか。

私の考えでは、-5 + 2 = -3 + 2=-1のように機能すると思いました。正の場合、5-2 = 3-2=1になります。

ありがとう。

編集:私は自分の数学ライブラリを使用してCMATHを使用せずにこれを実行しようとしています。

編集:私の戻り結果はプログラムの後の部分にあり、出力を表示します。これは、プログラム全体の単なるブロックです。

4

3 に答える 3

2

あなたが行方不明です

return result;
于 2013-02-08T03:35:27.847 に答える
2

コードのこの部分のみを調べます。

if (X<0){
    do
    {
      result =  result + Y;
    }while(0 >= result);
}

resultX が -5 で、 0だとしましょう。

doループが実行されます:

1. pass - result = -3
2. pass - result = -1 
3. pass - result = -1 + 2 = 1

3. pass2. passresult fromがまだゼロ未満であるため、実行されます。

ループ条件を次のように変更する必要がありますwhile(0 >= result + Y)

于 2013-02-08T03:36:11.623 に答える
1

整数列を考える

-7 -6 -5 -4 -3 -2 -1 0 1 2 3 4 5 6 7

取るときmod(5,2)は、5 以下の 2 の倍数を取って、差を 5 で返します。1 (5-4)

この概念による負の数の場合

のためにmod(-5, 2)。-5 未満で 2 で割り切れる数は -6 (-4 ではなく、-4 > -5) です。そしてその違いは(-5 - -6)どちらが であるかです1。それがあなたのコードで起こっていることです

于 2013-02-08T03:46:44.973 に答える