R最大/最小可表示数字

Iml*_*ith 8 r data-representation

我想在R中获得最大/最小的可表示数字.

输入".Machine"后

我有:

$double.xmin
[1] 2.225074e-308

$double.xmax
[1] 1.797693e+308
Run Code Online (Sandbox Code Playgroud)

但是,即使我在R命令提示符下键入2.225074e-309,我得到2.225074e-309而不是预期的0

如何找到最大/最小数字,其中加1或减1将导致Inf(添加1到最大数字)或0(从最小数字减去1)?

Jos*_*ien 9

.Machine$double.xmin给出表示符合IEEE 754浮点计算技术标准要求的最小正数的值.正如维基百科关于双精度浮点数的文章所述,该标准要求:

如果具有最多15位有效数字的十进制字符串转换为IEEE 754双精度表示,然后转换回具有相同有效位数的字符串,则最终字符串应与原始字符串匹配.如果将IEEE 754双精度转换为具有至少17位有效数字的十进制字符串,然后再转换回双精度数,则最终数字必须与原始数字匹配.

同一篇文章接着指出,通过降低精度,甚至可以表示更小的正数(不符合标准的精度要求):

指数的11比特宽度允许10之间的数字表示-308和10 308,具有完全15-17十进制数字精度.通过降低精度,次正规表示允许甚至更小的值达到约5×10 -324.

R的双精度表现就是这样,如下面的详细信息部分所述?.Machine:

请注意,在大多数平台上,可能会出现比'.Machine $ double.xmin'更小的正值.在典型的R平台上,最小的正双倍约为'5e-324'.

要确认这是可以使用R的双精度表示的最小正值,并查看精度损失的成本,请尝试以下几个操作:

5e-324
# [1] 4.940656e-324
2e-324
# [1] 0
1.4 * 5e-324
# [1] 4.940656e-324
1.6 * 5e-324
# [1] 9.881313e-324
Run Code Online (Sandbox Code Playgroud)