設定値

> .Machine
$double.eps
[1] 2.220446e-16

$double.neg.eps
[1] 1.110223e-16

$double.xmin
[1] 2.225074e-308

$double.xmax
[1] 1.797693e+308

$double.base
[1] 2

$double.digits
[1] 53

$double.rounding
[1] 5

$double.guard
[1] 0

$double.ulp.digits
[1] -52

$double.neg.ulp.digits
[1] -53

$double.exponent
[1] 11

$double.min.exp
[1] -1022

$double.max.exp
[1] 1024

$integer.max
[1] 2147483647

$sizeof.long
[1] 4

$sizeof.longlong
[1] 8

$sizeof.longdouble
[1] 12

$sizeof.pointer
[1] 4
  • 実数は\pm a \times b^c
    • bは2
    • bが2なのでaは1以上2未満の少数にすることができる
    • cは整数
    • \pmは符号、sign
    • a仮数、siginificand(Wiki)とか
      • ただし、Mantissaと言うこともあるらしい。その理由は「Mantissaは小数点以下の数字」という意味でもあるのだが、b=2のとき、仮数は1.xxxという数字なので、xxxxだけを用いてもよい、という意味合いでMantissaという用語が生き残っている?(らしい?)(Mathworld)
    • bは基数、baseとかradixとか
    • cは指数、exponent
  • $double.eps 2.220446e-16
    • 2.220446と"exponent"として-16という意味で2.220446 \times 10^{-16}
    • この数値が、「正の最小実数」
    • どうしてそうなるか、言うと
      • a\times b^cと表すときの最小値だからで、ここで1\le a < 2b=.Machine$double.base でそれが2、cの最小値は.Machine$double.ulp.digitsで-52
> .Machine$double.eps
[1] 2.220446e-16
> .Machine$double.base
[1] 2
> .Machine$double.ulp.digits
[1] -52
> .Machine$double.base^.Machine$double.ulp.digits
[1] 2.220446e-16
    • 「区別のつく正の最小数」であるとは、1+.Machine$double.eps-1が0ではないということ
      • この場合は、1=1.000 \times 10^02.220446\times 10^{-16}とで小数点の位置を同じにしておかないときちんと計算できない
# 区別がつかない
> !(1+.Machine$double.base^(.Machine$double.ulp.digits-1)-1)
[1] TRUE
# 区別がつく
> !(1+.Machine$double.base^(.Machine$double.ulp.digits)-1)
[1] FALSE
  • .Machine$double.neg.eps 1.110223e-16
    • 負の場合
> .Machine$double.neg.eps
[1] 1.110223e-16
> .Machine$double.base
[1] 2
> .Machine$double.neg.ulp.digits
[1] -53
> .Machine$double.base^.Machine$double.neg.ulp.digits
[1] 1.110223e-16
> # 区別がつかない
> !(1-.Machine$double.base^(.Machine$double.neg.ulp.digits-1)-1)
[1] TRUE
> # 区別がつく !(1-.Machine$double.base^(.Machine$double.neg.ulp.digits)-1)
[1] FALSE
  • .Machine$double.xmin 2.225074e-308
    • 小数点の位置を変えてよければ、小さい領域で計算できる
> .Machine$double.xmin
[1] 2.225074e-308
> .Machine$double.base ^ .Machine$double.min.exp
[1] 2.225074e-308
> .Machine$double.xmax
[1] 1.797693e+308
# 機械によっては以下の計算値が.Machine$double.xmaxにならないことあるそうだ
> (1-.Machine$double.neg.eps)*.Machine$double.base ^ .Machine$double.max.exp
[1] Inf