gpt4 book ai didi

r - 在 R 中处理非常小的数字

转载 作者:行者123 更新时间:2023-12-03 20:19:23 25 4
gpt4 key购买 nike

我需要计算一个非常小的数字列表,例如

(0.1)^1000, 0.2^(1200),

然后将它们归一化,使它们总和为 1
IE。

a1 = 0.1^1000,
a2 = 0.2^1200

我想计算
a1' = a1/(a1+a2),
a2'=a2(a1+a2)。

当我得到 a1=0 时,我遇到了下溢问题。我怎样才能解决这个问题?
理论上我可以处理日志,然后 log(a1) = 1000*log(0.l) 将是一种表示 a1 没有下溢问题的方法 - 但为了规范化我需要得到
log(a1+a2) - 我无法计算,因为我不能直接表示 a1。

我正在用 R 编程 - 据我所知,在 c# 中没有像 Decimal 这样的数据类型
可以让你得到比 double 更好的值。

任何建议将不胜感激,谢谢

最佳答案

Brobdingnag package 处理非常大或非常小的数字,基本上将 Joris 的答案包装成一种方便的形式。

a1 <- as.brob(0.1)^1000
a2 <- as.brob(0.2)^1200
a1_dash <- a1 / (a1 + a2)
a2_dash <- a2 / (a1 + a2)
as.numeric(a1_dash)
as.numeric(a2_dash)

关于r - 在 R 中处理非常小的数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5802592/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com