我基本上有四个数字(比如 100、200、300、400),我需要计算概率为 100/(100+200+300+400)、200/(100+200+300+400),等等在。
当我使用小数数据类型来存储这些概率时,由于舍入问题,它们不会达到 1。在不使概率太不准确的情况下解决这个问题的最佳方法是什么?基本上我多次进行这种计算,所以我不想将所有除法都更改为 Math.Round 的东西。 :|
解决方案很简单:如果这样做时会感到疼痛,那就不要这样做.
如果你有rational概率,即整数之比的概率,并且您希望它们恰好相加为 1,那么首先不要将它们转换为十进制或双精度。使用任意精度有理数类型来表示任意精度有理数。
Microsoft Solver Foundation 中包含一个任意精度的有理类型;你可以下载并使用它。或者,您可以轻松地编写自己的代码,只需创建一个不可变的结构,该结构具有两个用于分子和分母的 BigInteger,然后编写所需运算符的实现。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)