R语言中等价百分比计算公式的结果差异原因问询
为什么两种等价的百分比计算会出现细微差异?
这是浮点数运算的精度限制导致的正常现象:
- R采用IEEE 754标准的64位双精度浮点数存储数值,这种格式无法精确表示所有十进制小数,运算过程中还会产生微小的舍入误差。
- 虽然
(a/sum(a))*100和(a*100)/sum(a)在数学上完全等价,但计算机的运算顺序不同:- 前者先计算
a/sum(a),得到近似值后再乘以100; - 后者先计算
a*100,再除以sum(a)。
两种路径的舍入步骤不完全一致,最终产生了量级在1e-15的极小偏差。
- 前者先计算
关于两个检测函数的区别:
all.equal()会自动忽略这种远低于实际分析阈值的浮点数偏差(默认容忍度约为1e-8),因此返回TRUE;all(perc_1==perc_2)是严格的逐元素精确相等判断,哪怕是1e-15的差异也会被判定为不相等,所以返回FALSE。
这种微小差异对实际数据分析没有任何影响,属于浮点数运算的固有特性,无需特殊处理。
内容的提问来源于stack exchange,提问作者André Barros
相关产品推荐
相关产品推荐

