在C中循环大向量的整数溢出?

Jer*_*oen 2 c

我们可以使用for循环迭代C中的向量,例如:

int len = length(x);
for (int i=0; i<len; i++) {
    double val = REAL(x)[i];
}
Run Code Online (Sandbox Code Playgroud)

这似乎工作正常,但我不明白为什么.根据维基百科,默认int类型的范围是-32767到+32767.那么为什么这仍然适用于比这更长的载体?

R是否会int以某种方式覆盖long int?这段代码支持的向量的最大长度是多少?

NPE*_*NPE 7

你误读了维基百科.这是一个更完整的引用(强调我的):

至少在[-32767,+ 32767]范围内

在大多数现代平台上(至少那些足以运行R的平台),int至少32位宽,可以提供一系列[?2147483647,+2147483647]或更多.

此外,R ?integer还有如下说法:

注意,R的当前实现使用32位整数作为整数向量,因此可表示整数的范围被限制为大约+/- 2*10 ^ 9:双精度可以精确地保持更大的整数.

最后,?.Machine说:

integer.max - 可以表示的最大整数.总是2147483647.