我有一个 C++ 函数,它根据一个简单的模型计算概率。似乎 C++ 倾向于将非常小的概率舍入为 0,将非常大的概率舍入为 1。这会导致后续计算出现问题(采用 log(p) 和 log(1-p))。
有没有一种方法可以显式表示小于 1 的最大数字,C++ 可以在内部表示而无需四舍五入?同样,最小的数大于 0?
我可以做这样的事情:
if (probability == 1)
probability = 0.999999999;
else if (probability == 0)
probability = 0.000000001;
Run Code Online (Sandbox Code Playgroud)
但这会导致其他数字问题(与累积数字有关)。有没有更原则的方法,也许使用 numeric_limits?