基于小数位的非确定性(随机)舍入

时间:2013-10-26 20:04:30

标签: c# rounding

我想做这样的事情:

return Utils.RandomDouble() < value - Math.Floor(value) : (int)Math.Floor(value) : (int)Math.Ceil(value);

很难谷歌;)有没有关于这种舍入机制或名称的文献?

只是一点背景: 我们将它用于我们基于整数(生命值)的健康的游戏,但是基于双精度计算损伤更准确。

1 个答案:

答案 0 :(得分:2)

银行家的舍入可能没问题,认为这不是随机的:它只是试图在输入为somehwat传播时统一分配偏差(比如stddev> 1)

但是,你正在描述

随机舍入(WikiPedia)

  

另一种无偏见的打破平局方法是随机四舍五入:   如果y的小数部分是.5,则在y + 0.5和y - 0.5之间随机选择q,概率相等。

     

就像半圆到偶数一样,这条规则基本上没有整体偏见;但它在偶数和奇数q值之间也是公平的。另一方面,它在结果中引入了随机分量;对相同数据执行两次相同的计算可能产生两种不同的结果。此外,如果人类(而不是计算机或偶然机器)“随机”决定在哪个方向上进行回合,那么它对无意识偏见持开放态度。

有点相关:交替打破平局(仍然会引入偏见,但缺乏随机成分)