最近我在学习Python,这可能是我关于Python的第一篇文章。我对R也比较陌生,已经使用R一年了。我在学习Python时比较了这两种语言。如果这个问题太简单了,我很抱歉。在
我不确定为什么R输出Inf
而python却没有。在
在R:
nchar(2^1500)
[1] 3
2^1500
[1] Inf
在Python中:
^{pr2}$我有两个问题:
a)为什么R提供Inf
而Python没有呢
b)我研究了How to work with large numbers in R?线程。似乎Brobdingnag
可以帮助我们处理大量的数字。然而,即使在这种情况下,我也无法计算nchar
。如何计算上述表达式,即R中的2^1500
2^Brobdingnag::as.brob(500)
[1] +exp(346.57)
> nchar(2^Brobdingnag::as.brob(500))
Error in nchar(2^Brobdingnag::as.brob(500)) :
no method for coercing this S4 class to a vector
显然,python在需要时默认使用任意精度的整数。R没有。然而,有许多有用的R包来执行任意精度的算法。选择哪个包取决于用例。在
要打开尚未讨论的包,请考虑
Rmpfr
包:它要求您设置一个精度,但如果您使它足够大,它可以容纳2^1500作为整数。在
但是,它似乎也没有定义
^{pr2}$as.character()
函数:因此,如果您的问题是具体的数字计数,那么this answer中讨论的
gmp
包可能是正确的方法。另一方面,如果您对任意精度的浮点运算感兴趣,Rmpfr
可能是更好的选择。在回答您的问题:
a)他们使用不同的数字表示法。R中的大多数数字表示为双精度浮点值。这些都是64位长,在整个范围内提供大约15位精度,从-双.xmax到双.xmax,然后切换到有符号无限值。R有时也使用32位整数值。这些数据覆盖了大约+/-20亿的范围。R选择这些类型是因为它面向统计和数值方法,而这些方法很少需要比双精度给出的精度更高的精度。(他们通常需要更大的范围,但通常使用日志可以解决这个问题。)
Python更像是一个通用平台,MichaelChirico的评论中讨论了它的类型。在
b)除了
Brobdingnag
,gmp
包还可以处理任意大的整数。例如我想
as.character()
调用也需要Brobdingnag
。在相关问题 更多 >
编程相关推荐