R内部是否将数字视为双倍?
R是否主要将数字视为双倍 下面的代码表明R将数字视为双精度。即使我把它设为整数,经过一些计算,它也很容易变成双倍。(代码1) 此外,即使结果看起来像整数,内部也被视为double。(代码2) 我的理解正确吗 代码1:R内部是否将数字视为双倍?,r,integer,double,R,Integer,Double,R是否主要将数字视为双倍 下面的代码表明R将数字视为双精度。即使我把它设为整数,经过一些计算,它也很容易变成双倍。(代码1) 此外,即使结果看起来像整数,内部也被视为double。(代码2) 我的理解正确吗 代码1: >类型(5) [1] “双倍” >类型(5/1) [1] “双倍” >typeof(作为整数(c(1,2,3))) [1] “整数” >类型(如整数(c(1,2,3))+1) [1] “双倍” >typeof(作为整数(c(1,2,3))/1) [1] “双倍” 代码2: >1+
>类型(5)
[1] “双倍”
>类型(5/1)
[1] “双倍”
>typeof(作为整数(c(1,2,3)))
[1] “整数”
>类型(如整数(c(1,2,3))+1)
[1] “双倍”
>typeof(作为整数(c(1,2,3))/1)
[1] “双倍”
代码2:
>1+2
[1] 3
>类型(1+2)
[1] “双倍”
要使一个数字从一开始就是一个整数,请将L
添加到该数字中:
typeof(1L)
# [1] "integer"
但是,使用32位整数存在危险:
2e9L
# [1] 2000000000
2e9L + 2e9L
# [1] NA
# Warning message:
# In 2000000000L + 2000000000L : NAs produced by integer overflow
R以不同的方式处理数字。在R中,整数和双精度浮点都默认为其32位版本 正如安德烈所指出的,R中有两种不同类型的数字
1L,2L,3L,….
,这相当于as.integer(1)
typeof(1) #double
class(1) #numeric
typeof(1L) #integer
class(1L) #integer
定义明确。但是,在计算时,如果计算的任何部分未存储为小于或等于整数的类型,则它将自动转换为双精度:
typeof(1L + 1L) #integer
typeof(1L + 1) #double
typeof(1L + TRUE) #integer
typeof(1L * 3) #double
typeof(1L * 3L) #integer
但是,应该注意,与Python3.x相比,R使用32位变量运行时,这些变量的范围有限。但是,您可以通过使用64位整数的软件包bit64
和Rmpfr
绕过32位变量(在大多数情况下!),该软件包提供了一个任意浮点精度的接口(根据其文档)。请阅读。可能重复的