端数処理
十進法では、端数が0.5未満なら切り捨て、0.5以上なら切り上げる「半数切り上げ」の丸めを「四捨五入」という。JIS Z 8401で規則Bとして定められている。「四捨五入」という呼び名は、小数第一位が4以下ならば切り捨て、5 以上ならば切り上げることに相当することから来ている。一般にはR丸めとも言う。
正数に対しては、0.5を足して切り捨てるという、単純なアルゴリズムで得られる。なお、負数に対して正常な結果を得ようとすれば、切り捨ては負の無限大への丸めである必要がある(0への丸めだと、たとえば−2が−1に丸められてしまう)。ただし、0.5を足して負への無限大へ丸めると、端数が0.5の場合に絶対値が減る(たとえば、−1.5は−1へと丸められる)。一方、JIS Z 8401では、負数は絶対値として丸める(−1.5は−2へと丸められる)。実際に、コンピュータで負の数に「0.5を足して切り捨て」た場合どうなるかは、負数と切り捨ての実装による。
端数が0.5のとき常に増える方向に丸められるため、(端数がランダムでない場合は)わずかに正のバイアスが発生しうる。
ある数を丸める際に、[0,1)の一様乱数を発生させて、乱数の値が端数以上なら切り捨て、端数より小さければ切り上げる。
あるいはその数に一様乱数を足して切り捨てることで得られる。
丸め誤差は上界が1だが、分布が0近くに集まっているため、ランダムなデータに対する平均二乗誤差は切り捨て・切り上げよりは少ない。
任意の分布の端数に対して、バイアスがないのが特長である。たとえば、0~0.5の間にある端数が多かったとすると、偶数への丸めでは負のバイアスが生まれるが、乱数丸めではバイアスがない。
ディザの一種として使われる。