当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


R .Machine 机器的数值特性


R语言 .Machine 位于 base 包(package)。

说明

.Machine是一个变量,保存有关机器数值特征的信息R正在运行,例如最大的双精度或整数以及机器的精度。

用法

.Machine

细节

该算法基于 Cody (1988) 的子例程 MACHAR。由于当前所有的实现R使用 32 位整数并使用 IEC 60559 浮点(双精度)算术,"integer""double"几乎所有的相关值都是相同的R构建。

请注意,在大多数平台上,正值小于.Machine$double.xmin可能会发生。在一个典型的R平台最小正双精度约为5e-324.

包含组件的列表

double.eps

满足 1 + x != 1 的最小正浮点数 x 。如果double.base 为2 或double.rounding 为0,则它等于double.base ^ ulp.digits;否则,它是 (double.base ^ double.ulp.digits) / 2 。通常是 2.220446e-16

double.neg.eps

一个小的正浮点数 x 使得 1 - x != 1 。如果double.base为2或double.rounding为0,则它等于double.base ^ double.neg.ulp.digits;否则,它是 (double.base ^ double.neg.ulp.digits) / 2 。通常是 1.110223e-16 。由于 double.neg.ulp.digits 下面以 -(double.digits + 3) 为界,因此 double.neg.eps 可能不是可以通过减法改变 1 的最小数字。

double.xmin

最小的非零标准化浮点数,基数的幂,即 double.base ^ double.min.exp 。通常是 2.225074e-308

double.xmax

最大的标准化浮点数。通常,它等于 (1 - double.neg.eps) * double.base ^ double.max.exp ,但在某些机器上,它只是第二大或第三大数字,尾数的最后一位数字小了 1 或 2 个单位。通常是 1.797693e+308 。请注意,可能会出现更大的非标准化数字。

double.base

浮点表示的基数:通常为 2

double.digits

浮点尾数中的基数位数:通常为 53

double.rounding

舍入动作,其中之一
如果浮点加法被截断,则为 0;
1 如果是浮点加法舍入,但不是 IEEE 风格;
2 if IEEE 风格的浮点加法循环;
3 浮点加法是否中断,并且存在部分下溢;
4 如果浮点加法舍入,但不是IEEE风格,并且存在部分下溢;
5 如果浮点加法以 IEEE 风格进行舍入,并且存在部分下溢。
通常情况下5.

double.guard

截断算术乘法的保护位数。如果浮点算术截断且超过则为 1double digits根据-double.base数字参与乘法中浮点有效数的 post-normalization 移位,否则为 0。
通常情况下0.

double.ulp.digits

最大负整数 i 使得 1 + double.base ^ i != 1 ,但它的边界是 -(double.digits + 3) 。通常是 -52

double.neg.ulp.digits

最大负整数 i 使得 1 - double.base ^ i != 1 ,但它的边界是 -(double.digits + 3) 。通常是 -53

double.exponent

为表示浮点数的指数(包括偏差或符号)而保留的位数(如果 double.base 为 10,则为小数位)。通常是 11

double.min.exp

最大的负整数 i,使得 double.base ^ i 为正且已标准化。通常是 -1022

double.max.exp

溢出的 double.base 的最小正幂。通常是 1024

integer.max

可以表示的最大整数。始终

sizeof.long

C long 类型中的字节数:48(大多数 64 位系统,但不是 Windows)。

sizeof.longlong

Clong long 类型中的字节数。如果没有这种类型,则为零,否则通常为 8

sizeof.longdouble

C 中的字节数long double类型。如果没有这种类型(或者它的使用在以下情况下被禁用),则为零R已建成),否则可能12(大多数 32 位版本),16(大多数 64 位版本)或 8(对于大多数编译器来说,诸如 ARM 之类的 CPUlong double等同于double)。

sizeof.pointer

C 中的字节数SEXP类型。将4在 32 位版本上和8在 64 位版本上R.

sizeof.time_t

的数量字节在Ctime_t类型:64位time_t(值8)如今更受青睐。请注意,这是代码中使用的类型R本身,不一定是系统输入如果R配置为--with-internal-tzcode也用于 Windows 上。

longdouble.eps, longdouble.neg.eps, longdouble.digits, ...

引入于R4.0.0。什么时候capabilities("long.double")是真的,有10个这样的"longdouble.<kind>"值,指定long double其对应的属性"double.*"对方。另请参阅“注意”。

注意

在(典型)情况下capabilities("long.double")是真的,R使用long doubleC 类型在内部相当多的地方用于累加器,例如sum,将非整数数值常量读入(二进制)双精度数字,或算术,例如x %% y;还,long double可以通过以下方式读取readBin.
为此,在这种情况下,.Machine还包含十个成分,longdouble.eps,*.neg.eps,*.digits,*.rounding *.guard,*.ulp.digits,*.neg.ulp.digits,*.exponent,*.min.exp, 和*.max.exp,完全类似于他们的计算double.*同行们,请参阅那里。

sizeof.longdouble只告诉您为 long double 分配的存储量。通常存储的是 IEC 60559 的 80 位扩展双精度类型,填充到平台上使用的双对齐 — 这似乎是常见的情况R使用 ix86 和 x86_64 芯片的平台。还有其他 long double 的实现,通常在软件中,例如 Sparc Solaris 和 AIX 上。

请注意,平台拥有long doubleC 型,与doubletype — 这发生在 ARM cpu 上。在这种情况下capabilities("long.double")将是错误的,但在版本上R在 4.0.4 之前,.Machine可能含有"longdouble.<kind>"元素。

例子

.Machine
## or for a neat printout
noquote(unlist(format(.Machine)))

来源

在参考中使用 Fortran 代码的 C 翻译,由 R 核心团队修改以击败现代编译器中的 over-optimization。

参考

Cody, W. J. (1988). MACHAR: A subroutine to dynamically determine machine parameters. Transactions on Mathematical Software, 14(4), 303-311. doi:10.1145/50063.51907.

也可以看看

.Platform 了解平台的详细信息。

相关用法


注:本文由纯净天空筛选整理自R-devel大神的英文原创作品 Numerical Characteristics of the Machine。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。