R中对长数的操作
Operations on long numbers in R
我的目标是使用最大似然法(通常大约 10^5 次迭代),其概率分布会创建非常大的整数和非常小的浮点值,这些值不能存储为 numeric
也不能存储在 float
类型。
我想我会使用 gmp
包中的 as.bigq
。我的问题是只能对class/typebigq
的两个对象进行加减乘除,而我的分布实际上包含对数、幂、伽马和合流超几何函数。
我处理这个问题的最佳选择是什么?
- 我应该使用另一个包吗?
- 我应该为
bigq
对象编写所有这些函数吗?
- 在 R 上编写这些函数可能会导致某些函数非常慢,对吗?
- 如何只使用
+,-,*,/
运算符来写对数函数?我应该使用泰勒级数展开来逼近这个函数吗?
- 当指数不是整数时,如何仅使用
+,-,*,/
运算符编写幂函数?
- 如何写合流超几何函数(相当于
Mathematica
中的Hypergeometric1F1Regularized[..]
函数)?
我最终可以在 C
中编写这些函数并从 R
中调用它们,但这听起来像是一些复杂的工作,但并不多,特别是如果我必须使用 gmp
包在 C 中也可以处理这些大数字。
您的所有问题都可以用 Rmpfr
解决,这让您可以任意准确地使用 getGroupMembers("Math")
返回的所有函数。
插图:http://cran.r-project.org/web/packages/Rmpfr/vignettes/Rmpfr-pkg.pdf
它可以做什么的简单示例:
test <- mpfr(rnorm(100,mean=0,sd=.0001), 240)
Reduce("*", test)
虽然我认为它没有超几何函数...
我的目标是使用最大似然法(通常大约 10^5 次迭代),其概率分布会创建非常大的整数和非常小的浮点值,这些值不能存储为 numeric
也不能存储在 float
类型。
我想我会使用 gmp
包中的 as.bigq
。我的问题是只能对class/typebigq
的两个对象进行加减乘除,而我的分布实际上包含对数、幂、伽马和合流超几何函数。
我处理这个问题的最佳选择是什么?
- 我应该使用另一个包吗?
- 我应该为
bigq
对象编写所有这些函数吗?- 在 R 上编写这些函数可能会导致某些函数非常慢,对吗?
- 如何只使用
+,-,*,/
运算符来写对数函数?我应该使用泰勒级数展开来逼近这个函数吗? - 当指数不是整数时,如何仅使用
+,-,*,/
运算符编写幂函数? - 如何写合流超几何函数(相当于
Mathematica
中的Hypergeometric1F1Regularized[..]
函数)?
我最终可以在 C
中编写这些函数并从 R
中调用它们,但这听起来像是一些复杂的工作,但并不多,特别是如果我必须使用 gmp
包在 C 中也可以处理这些大数字。
您的所有问题都可以用 Rmpfr
解决,这让您可以任意准确地使用 getGroupMembers("Math")
返回的所有函数。
插图:http://cran.r-project.org/web/packages/Rmpfr/vignettes/Rmpfr-pkg.pdf
它可以做什么的简单示例:
test <- mpfr(rnorm(100,mean=0,sd=.0001), 240)
Reduce("*", test)
虽然我认为它没有超几何函数...