Próbuję pracować z pewnymi prawdopodobieństwami, które stają się bardzo małe, co powoduje problemy. Na przykładArytmetyka z bardzo małymi numerami w 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
Jednak każdy arytmetyczna z tego wektora powoduje wszystko po 12. Wpis do zaokrąglania do zera (prawdopodobnie dlatego, że jest mniej niż .Machine $ double.eps). Na przykład:
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
ale
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
Próbowałem przy użyciu pakietu GMP ale robię obliczeń opartych combinatoric i as.bigq (probs) dostaje bardzo powolny, gdy podniesiona do dużych mocach.
Jakieś sposoby obejścia tego?
Aby obejść tego rodzaju problemy, często pracujemy z logarytmicznymi prawdopodobieństwami, dzięki czemu można zsumować prawdopodobieństwa zamiast pomnażania (co często jest przyczyną małych prawdopodobieństw). – Marius
@Marius Nieco zaskakujące, że nie wydaje się to duplikatem (może nie przeszukałem poprawnie). Byłoby miło mieć kanoniczną odpowiedź na temat wykorzystania prawdopodobieństw dzienników w R, aby poprawić dokładność liczbową. Być może mógłbyś rozwinąć swój komentarz i uczynić go odpowiedzią. –
@JohnColeman Czy naprawdę potrzebujemy ustalić strategię prawdopodobieństwa logowania dla każdego języka osobno? Wiem, że widziałem podobne pytania w innych językach. –