我想做这样的事情:
return Utils.RandomDouble() < value - Math.Floor(value) : (int)Math.Floor(value) : (int)Math.Ceil(value);
很难谷歌;)有没有关于这种舍入机制或名称的文献?
只是一点背景: 我们将它用于我们基于整数(生命值)的健康的游戏,但是基于双精度计算损伤更准确。
答案 0 :(得分:2)
银行家的舍入可能没问题,认为这不是随机的:它只是试图在输入为somehwat传播时统一分配偏差(比如stddev> 1)
但是,你正在描述
另一种无偏见的打破平局方法是随机四舍五入: 如果y的小数部分是.5,则在y + 0.5和y - 0.5之间随机选择q,概率相等。
就像半圆到偶数一样,这条规则基本上没有整体偏见;但它在偶数和奇数q值之间也是公平的。另一方面,它在结果中引入了随机分量;对相同数据执行两次相同的计算可能产生两种不同的结果。此外,如果人类(而不是计算机或偶然机器)“随机”决定在哪个方向上进行回合,那么它对无意识偏见持开放态度。
有点相关:交替打破平局(仍然会引入偏见,但缺乏随机成分)