11
我正在嘗試使用一些可能導致問題的概率很小的概率。例如在R中使用非常小的數字的算術運算符
probs <- c(4.225867e-03,3.463125e-04,2.480971e-05,1.660538e-06,1.074064e-07,6.829168e-09,4.305051e-10,2.702241e-11,1.692533e-12,1.058970e-13,6.622117e-15,4.139935e-16,2.587807e-17,1.617488e-18,1.010964e-19,6.318630e-21,3.949177e-22 2.468246e-23,1.542657e-24,9.641616e-26,6.026013e-27,3.766259e-28,2.353912e-29,1.471195e-30,9.194971e-32
但是用這個載體的任何運算引起的一切後,第12項,以四捨五入爲零(可能是因爲它比。機$ double.eps更少)。例如:
probs > 0
[1] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
但
1-probs < 1
[1] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
我使用GMP包試過,但我在做組合學依據計算和as.bigq(probs)當提升到大的權力變得非常慢。
任何方法來解決這個問題?
爲了解決這些問題,通常使用對數概率,這樣就可以將概率相加而不是相乘(這通常是極小概率的原因)。 – Marius
@Marius有點令人驚訝的是,這似乎並不重複(也許我沒有正確搜索)。如果對R中的對數概率使用規範的答案來提高數字精度,那將是很好的。也許你可以擴展你的評論並將其作爲答案。 –
@JohnColeman我們是否真的需要爲每種語言分別說明對數概率策略?我知道我看過其他語言的類似問題。 –