2

おそらく非常に明白なので、私はこれを尋ねるのがほとんど恥ずかしいです-しかし、私はこれから抜け出す方法をきちんと見ることができず、それがあるのではないかと疑っています。

値を加算/減算する必要のある変数がありますが、値の範囲内に保ち、両端でループします。例:

範囲は0〜3であるため、値は0、1、2、3、0、1、2、3です。これにより、

x = (x + val) MOD 4

ただし、valが負の場合、0,3,2,1,0,3,2,1が表示され、ソリューションははるかにエレガントではありません。

x = (x + val) MOD 4
if (x < 0) x = 4 + x;

それは機能しますが、それは不格好であり、これに対する「1行」の解決策があるかもしれないと考えずにはいられません-しかし、私がそれを考えることができれば私は気になりますか?:)

困惑の準備をします

4

1 に答える 1

2

TaZで示されているように、ほとんどの「モジュロ」演算子は、実際には、の「数学的なモジュロ」のようにのみ機能する剰余演算子ですx+val >= 0

C ++では、ここにあるように(いくつかの変更を加えて)、次のように、より「数学的に正しい」モジュロを定義できます。

double mod(double x, double y) { return y!=0 ? x-floor(x/y)*y : x; }   

(おそらく整数バージョンも作成します)、

x = mod(x+val,4); 

正と負の両方で機能しx+valます。

于 2012-10-17T13:14:34.017 に答える