> .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
- 実数は
- は2
- が2なのでは1以上2未満の少数にすることができる
- は整数
- は符号、sign
- は仮数、siginificand(Wiki)とか
- ただし、Mantissaと言うこともあるらしい。その理由は「Mantissaは小数点以下の数字」という意味でもあるのだが、のとき、仮数は1.xxxという数字なので、xxxxだけを用いてもよい、という意味合いでMantissaという用語が生き残っている?(らしい?)(Mathworld)
- は基数、baseとかradixとか
- は指数、exponent
- $double.eps 2.220446e-16
- と"exponent"としてという意味で
- この数値が、「正の最小実数」
- どうしてそうなるか、言うと
- と表すときの最小値だからで、ここで、.Machine$double.base でそれが2、の最小値は.Machine$double.ulp.digitsで
> .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+.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] 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
> (1-.Machine$double.neg.eps)*.Machine$double.base ^ .Machine$double.max.exp
[1] Inf