具体的には、2つの符号なし整数(a、b)があり、%UINT_MAX(UINT_MAXは最大符号なし整数として定義されます)を計算します。そうする最善の方法は何ですか?モジュロ乗算(C言語)
背景:幾何学的シーケンスをエミュレートするためのモジュールをLinux用に書く必要があります。そこから読み取ると、次の要素(モジュロUINT_MAX)が得られます。私が見つけた唯一の解決策は、添加しながら、次のロジックを使用して行われる:(Iは、演算シーケンスのために使用すること)
for(int i=0; i<b; ++i){
if(UINT_MAX - current_value > difference) {
current_value += difference;
} else {
current_value = difference - (UINT_MAX - current_value);
}
最初の反復における現在の値は、A =(およびすべての反復において更新され、差が(常に=) 。明らかに、これは知的な解決策ではありません。 インテリジェントな人はどのようにこれを達成しますか?
ありがとう!前述したように、使用可能な幅の2倍の種類を持っている場合
モジュラス演算子または8バイトの整数型は使用できませんか? – davogotland
"long long"がintより長い型の場合、非常に単純な愚かな解決策です。 long long result =((long long)a)*((long long)b)%((long long)UINT_MAX); –
@JoachimIsakssonの結果は長い型のものである必要はありません、そうですか? – davogotland