我知道运行一个简单的行如sqrt(2) ^ 2 == 2
将返回FALSE,但是当我使用等式的左边部分创建一个对象时,它返回值2,但是在逻辑上将对象与数字进行比较时2,我还是假的。这似乎是错误的。这是代码:
> (root.of.2 <- sqrt(2))
[1] 1.414214
> (root.of.2.sqrd <- sqrt(2) ^ 2)
[1] 2
> (root.of.2.sqrd == 2)
[1] FALSE
这里发生了什么?
答案 0 :(得分:3)
仔细观察你的变量:
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
<script src="https://code.jquery.com/jquery-3.0.0.min.js"></script>
<div id="Outside">
<div id="Box"></div>
</div>
root.of.2.sqrd是数字。
> print(root.of.2.sqrd,18)
[1] 2.0000000000000004
阅读FAQ 7.31
顺便说一下,有类似的questions。
答案 1 :(得分:1)
它们是不同的数字(sqrt(2)在某个时间点是不合理的,一些数值不准确,无论多么小,都会用它的有理逼近引入):
print(sprintf('%.20f', 2))
#[1] "2.00000000000000000000"
print(sprintf('%.20f', sqrt(2) ^ 2))
#[1] "2.00000000000000044409"