當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。