Dav*_*ave 2 c++ rounding-error probability
我试图在C++中表示一组简单的3个概率.例如:
a = 0.1
b = 0.2
c = 0.7
Run Code Online (Sandbox Code Playgroud)
(据我所知,概率必须加起来为1)
我的问题是,当我尝试将C++中的0.7表示为浮点数时,我最终会得到0.69999999,这在我稍后进行计算时无济于事.同样为0.8,0.80000001.
有没有更好的方法在C++中表示0.0到1.0之间的数字?
请记住,这与数字如何存储在内存中有关,因此在对值进行测试时,我不关心它们的显示/打印方式.
lyr*_*cat 22
这与C++无关,而与浮点数如何在内存中表示有关.您永远不应该使用相等运算符来比较浮点值,请参阅此处以获得更好的方法:http://www.cygnus-software.com/papers/comparingfloats/comparingfloats.htm
Mar*_*Ray 14
我的问题是,当我尝试将C++中的0.7表示为浮点数时,我最终会得到0.69999999,这在我稍后进行计算时无济于事.同样为0.8,0.80000001.
这真的是个问题吗?如果您只需要更高的精度,请使用double而不是float.这应该可以让你获得大约15位数的精度,对于大多数工作来说已经够了.
考虑您的源数据.0.7真的比0.69999999更正确吗?
如果是这样,您可以使用有理数字库,例如:
http://www.boost.org/doc/libs/1_40_0/libs/rational/index.html
如果问题是概率根据定义加起来为1,则将它们存储为数字集合,省略最后一个.通过从1中减去其他值的总和来推断最后一个值.