我正在复制纸张部分的计算部分......
prod(c(0.44, 0.26, 0.21, 0.35, 0.37, 0.42, 0.35, 0.45, 0.34, 0.39,
0.33, 0.38, 0.26, 0.42, 0.22, 0.22, 0.47))
Run Code Online (Sandbox Code Playgroud)
这使,
8.500645e-09
Run Code Online (Sandbox Code Playgroud)
但是,该报告将此值报告为
8.13e-09
Run Code Online (Sandbox Code Playgroud)
在整个计算中存在其他差异的例子,例如这个(另一个prod()计算,lm()需要斜率和截距以供后续使用,其结果给出略微不同的结果).
我怀疑我正在考虑浮点差异,但我怎么能确定?如果是浮点差异,我需要进一步的信息来更精确地重现计算?
ps我已经阅读了关于浮点运算的stackoverflow上的帖子.
似乎不太可能只有17个项目的浮点错误可能传播到5%差异的程度,除非数据被舍入显示但在计算中没有舍入.但是,如果基础值可能与显示器的差异高达0.005,那么我认为这可能是"浮点问题"或更准确地说是由舍入操作引起的错误传播.
var <- c(0.44, 0.26, 0.21, 0.35, 0.37, 0.42, 0.35, 0.45, 0.34, 0.39,
0.33, 0.38, 0.26, 0.42, 0.22, 0.22, 0.47)
> prod(var+runif(17, -0.005, 0.005) )
[1] 8.483948e-09
> prod(var+runif(17, -0.005, 0.005) )
[1] 8.778634e-09
> prod(var+runif(17, -0.005, 0.005) )
[1] 8.351511e-09
> prod(var+runif(17, -0.005, 0.005) )
[1] 8.113381e-09
> prod(var+runif(17, -0.005, 0.005) )
[1] 8.224519e-09
> prod(var+runif(17, -0.005, 0.005) )
[1] 8.664986e-09
set.seed(101)
rr <- replicate(1000,prod(var+runif(17, -0.005, 0.005)))
par(las=1,bty="l")
hist(rr,breaks=50,col="gray")
abline(v=c(8.5e-9,8.13e-9),col=c(2,4),lwd=2)
Run Code Online (Sandbox Code Playgroud)
