丸め
割り算などの結果をある桁で丸めるとき、普通は切り捨てか四捨五入するが、SystemCの固定小数点型ではその他の丸め方も用意されている。
説明を簡単にするため、整数部3ビット、小数部3ビットの数を整数に丸める場合を考える。
sI I I . mF F F : sIは符号ビット、Iは残りの整数部ビット、mFは小数部のMSB、Fは残りの小数部ビット |
◇
表にまとめると、切り捨てと四捨五入は場合分けなしに計算できて回路コストが小さいのが長所、その他の方法は回路コストは大きいが偏りが無いのが長所であることがわかる。ただし、四捨五入に偏りがあるといっても、丸め前の値が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 |
なし |