丸め

[] [] []


割り算などの結果をある桁で丸めるとき、普通は切り捨てか四捨五入するが、SystemCの固定小数点型ではその他の丸め方も用意されている。

説明を簡単にするため、「整数部3ビット、小数部3ビットの数 sI I I . mF F F」を整数に丸める場合を考える。ここでsIは符号ビット、Iは残りの整数部ビット、mFは小数部のMSBFは残りの小数部ビットである。

表にまとめてみると、切り捨てと四捨五入は場合分けなしに計算できて回路コストが小さいのが長所、その他の方法は回路コストは大きいが偏りが無いのが長所であることがわかる。ただし、四捨五入に偏りがあるといっても、丸め前の値が0.5刻みならば50%の確率で大き目になってしまうが、もっと細かく0.1刻みで分布していれば大き目になる確率は10%であり、結局、丸め前の小数部が一様分布していれば偏りは無視できる

種類

横軸は真値,縦軸は丸め

sIII.mFFFの計算方法

偏り

SC_TRN

truncate to -

切り捨て

sIII

小さ目

SC_TRN_ZERO

truncate to 0

if(sI=0) sIII

if(sI=1) sIII + 1

なし

SC_RND

round to +

四捨五入

sIII + 0.mF

やや大き目

SC_RND_ZERO

round to 0

if(sI=0) sIII + (FF!=00)? 0.mF:0.0

if(sI=1) sIII + 0.mF

なし

SC_RND_MIN_INF

round to -

sIII + (FF!=00)? 0.mF:0.0

やや小さ目

SC_RND_INF

round to ±∞

if(sI=0) sIII + 0.mF

if(sI=1) sIII + (FF!=00)? 0.mF:0.0

なし


[] [] []