アプリ版:「スタンプのみでお礼する」機能のリリースについて

http://www.tensyo.com/urame/date/dayTips.htm#MOD
によると、除算を行わずに剰余を求める方法として、

-------------------------------------------------------
2^N>=b となるNを求める(2^N == 1<<N)
B=2^N-b
C=2^N-1
while(a>=2*b){ B *(a>>N) + a&C };
最後に1回 if(a>=b)a-=b ; と計算する
-------------------------------------------------------

とありますが、これの実装はおそらく誤植です。
というのも、4行目B *(a>>N) + a&Cは代入操作等をしていないため、
実質何もしていないからです。

そこで、a=B *(a>>N) + a&Cのように変更するなどやってみましたが、
5回に1回ぐらい異なる値が現れます。

このアルゴリズムはどのように変更したらよいでしょうか?
また、他の方法でも結構ですので、教えてください。

A 回答 (2件)

a=B *(a>>N) + a&C;


じゃなくて
a=B *(a>>N) + (a&C);
だろう。
    • good
    • 0
この回答へのお礼

なるほど、ありがとうございます。
明日試してみます。

お礼日時:2013/09/25 22:59

言語は何だ?


%演算子を使うのはダメなのか?
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
言語はC++を想定してますが、
%を明示的には使わず(計算の途中で使うのはOK)に
結果を出力したいです。

お礼日時:2013/09/25 22:29

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!