- 締切済み
絶対値の取り方
2つ数値の差を絶対値で求める適切な計算法を探しています. 2つの候補の内,回路の大きさが小さくなりそうな方はどちらですか? また,絶対値を求める他の方法があったら教えてください。 <候補1> X(絶対値)a1,a2(データ) if(a1 < a2) X <= a2 - a1; elsif (a2 > a1 ) X <= a1 -a2; else X <= 0 <候補2> df(N+1) 絶対値 X をビットで表現したときの最上位ビット X <= a1-a2 X <= ( df(N+1) xor df(N) ) & ( df(N+1) xor df(N-1) ) & ( df(N+1) xor df(N-2) ) & ・・・・・・・ ( df(N+1) xor df(2) ) & ( df(N+1) xor df(1) ) & ( df(N+1) xor df(0) ) + ("000000000" & df(N+1));
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- kmee
- ベストアンサー率55% (1857/3366)
回答No.3
- kmee
- ベストアンサー率55% (1857/3366)
回答No.2
- edomin7777
- ベストアンサー率40% (711/1750)
回答No.1
お礼
お答えありがとうございます この部分で if文を論理演算を表し,{ if(a1 < a2), else } cmp(i+1) =False なら cmp(i)<= (a1(i) ≠ a2(i)) sel(i)<= (a1(i) > a2(i)) cmp(i+1) =Trueなら cmp(i)<=cmp(i+1) sel(i)<=sel(i+1) この部分で,if文の中身の計算ですね。 sel(i) =True なら df(i),Carry(i)<=a1(i) - a2(i) -Carry(i-1) sel(i) =False なら df(i),Carry(i)<=a2(i) - a1(i) -Carry(i-1) この方法は<候補1>と同じような気がします、、
補足
<絶対値の演算を論理回路を組み合わせてやりたい、ということでよろしいですか? 絶対値演算を論理式で記述するか,セレクタ(if文)を用いた記述するか どちらがシステム的に優れているかということです。 ↓2の補数を求めています。 最上位ビットが1なら符号を反転,最後に1を足す. X <= ( df(N+1) xor df(N) ) & ( df(N+1) xor df(N-1) ) & ( df(N+1) xor df(N-2) ) & ・・・・・・・ ( df(N+1) xor df(2) ) & ( df(N+1) xor df(1) ) & ( df(N+1) xor df(0) ) + ("000000000" & df(N+1));