- 134 名前:133 mailto:sage [2009/06/30(火) 03:39:26 ]
- >>123 左右反転加算
3による除算命令を使って何かできないか? b = a/3 の演算は次のような演算とみてよい。 c = a[MSB]; //逆キャリー for(i=MSB-1;i<LSB;i--){ // 以下はいわゆる「筆算」による除算 b[i] = (c<<1 & a[i]) >= 3; c = (c<<1 & a[i]) % 3; } 一方加算 b = a0 + a1 は次の通り。 c = 0; for(i=LSB;i<MSB;i++){ b[i] = a0[i]^a1[i]^c; c = a0[i]&a1[i] | a0[i]&c | a1[i]&c; } 結構構造が似てる気がするのだが。 それでいて a/3 は LSB へ向かって結果が伝搬し、下位からの影響はない。 a/3 が1入力演算なので2入力演算な左右反転加算にはまだ遠いが… なにか道が開けるかもしれない。
|

|