R 圆到机器公差

R 圆到机器公差,r,precision,R,Precision,我想得到一组预测,并将它们四舍五入到机器容差,然后根据这些数字计算一个散列。目标是确定生成这些数字的复杂R过程是否已被改变。对流程的代码库进行的每一次实质性更改都将生成这些数字,对它们进行取整,然后计算散列,以便在数据库中轻松确定和跟踪流程的一致性 我熟悉all.equal(),但是使用all.equal()需要将每一组数字直接与R中的其他每一组数字进行比较——而我所设想的将同一性与一大组进程版本进行比较,只需基于表中的散列即可 所以我的问题是,如何将R中的数字向量舍入到与all.equal中使

我想得到一组预测,并将它们四舍五入到机器容差,然后根据这些数字计算一个散列。目标是确定生成这些数字的复杂R过程是否已被改变。对流程的代码库进行的每一次实质性更改都将生成这些数字,对它们进行取整,然后计算散列,以便在数据库中轻松确定和跟踪流程的一致性

我熟悉
all.equal()
,但是使用
all.equal()
需要将每一组数字直接与R中的其他每一组数字进行比较——而我所设想的将同一性与一大组进程版本进行比较,只需基于表中的散列即可

所以我的问题是,如何将R中的数字向量舍入到与
all.equal
中使用的精度完全相同的精度

i、 例如,让我们命名完成我想要的机器的取整函数。
machine.round
完全相同(machine.round(x),machine.round(y))
当且仅当
全部相等(x,y)

机器圆的定义是什么

#two vectors which are considered equal by all.equal but not by identical
x <- c(.3, .4 - .1, .5 - .2, .6 - .3, .7 - .4)
y <- c(.3, .3, .3, .3, .3)
all.equal(x,y)
identical(x,y)



#two vectors which are considered unequal by all.equal and identical:
x2 <- c(.30001, .4 - .1, .5 - .2, .6 - .3, .7 - .4)
y2 <- c(.3, .3, .3, .3, .3)
all.equal(x2,y2)
identical(x2,y2)
#所有人都认为相等的两个向量。相等但不相同

xall.equal使用的默认公差可通过检查其形式参数找到:

formals(all.equal.numeric)$tolerance
sqrt(.Machine$double.eps)
评估结果如下:

eval(formals(all.equal.numeric)$tolerance)
[1] 1.490116e-08
然而,我不认为取整然后比较是正确的方法。您应该像检查
all.equal
一样检查此公差范围内的紧密度

例如:

abs(x-y)<sqrt(.Machine$double.eps)
[1] TRUE TRUE TRUE TRUE TRUE
abs(x2-y2)<sqrt(.Machine$double.eps)
[1] FALSE  TRUE  TRUE  TRUE  TRUE

abs(x-y)添加了一个来自R_inferno的向量作为演示示例我认为你是对的,更多地考虑这一点意味着我试图实现的目标(基于具有机器错误的预测比较哈希值)是不可能的。无论i取整到何种精度水平,都存在一种非零概率,即被R视为“全部相等”的数字可能会在取整截止点的对侧结束,从而导致不同的散列,并错误地暗示不一致性