admin 发表于 2024-3-12 18:15:10

R语言中的浮点数

# 背景

使用R语言计算

```R
> 0.6*7 - 0.7*6
8.881784e-16
```

出现了以上结果,本来结果应为0的。

# 原因

这实际上是电脑算法产生的细微误差,如果用"=="或者identical(),可以捕捉到这些细微误差。

```R
> 0.6*7 == 0.7*6
FALSE
> identical(0.6*7, 0.7*6)
FALSE
```

但如果我们需要忽略这些误差的时候,可以用“all.equal()”来避免这些令人尴尬的比较结果。

```
> all.equal(0.6*7, 0.7*6)
TRUE
```

同样的例子还有如下。

```R
> sqrt(2) ^ 2 - 2
4.440892e-16
> sqrt(2) ^ 2 == 2
FALSE
> identical(sqrt(2) ^ 2, 2)
FALSE
> all.equal(sqrt(2) ^ 2, 2)
TRUE
```

还有

```R
> 2.2e-2 - 2.2 * 10 ^ (-2)
-3.469447e-18
> 2.2e-2 == 2.2 * 10 ^ (-2)
FALSE
> identical(2.2e-2, 2.2 * 10 ^ (-2))
FALSE
> all.equal(2.2e-2, 2.2 * 10 ^ (-2))
TRUE
```

计算机的世界规则,可见一斑。
页: [1]
查看完整版本: R语言中的浮点数