应该使用什么数据类型来存储概率(因此从0到1)?有没有比使用double
或float
值控制(0 ≤ x ≤ 1
)更有效的方式?
答案 0 :(得分:2)
常见的替代选择是unsigned short
或unsigned int
上的定点算术,小数点设置在最左边:因此,对于通常的unsigned short
,值范围要么是从0.00000 = 0/65535到1.0000 = 65535/65535,或0.0000 = 0/65536到0.99998 = 65535/65536,具体取决于您是否希望能够精确地表示1.0或0.5。
这种设计的主要优点是可表示的概率在单位间隔内均匀间隔,并且任何计算都不可能产生数学上有意义的范围之外的值。主要缺点是P(AB)无法通过简单乘法计算,您必须选择1.0和0.5中的哪一个可以精确表示,而下溢更有可能咬你。性能可能是对现代CPU的影响。
我不知道你的意思"更有效率"所以我不能更具体。
答案 1 :(得分:0)
是的,有一种更有效的方法来使用概率。只需使用普通的旧规范化整数,其中1等于机器中整数的最大数字。
这意味着您只需要缩放(0≤x≤1)的浮点数。您可以在此处找到有关最大数量的讨论:What is the maximum value for an int32?
此外,还有其他方法,如Q号类型和数据格式,但它们通常应用于TI的DSP处理器架构:https://en.wikipedia.org/wiki/Q_%28number_format%29