我在R中编写一个函数,要求我将计数器递增0.05.当我调整计数器的值时,我被告知该值不是它出现的值.
例:
将计数器设置为0
cntr < - 0; CNTR;
[1] 0
Run Code Online (Sandbox Code Playgroud)
递增计数器0.05并测试
cntr < - cntr + 0.05; CNTR; [1] 0.05
> cntr == 0.05
[1] TRUE
Run Code Online (Sandbox Code Playgroud)
到现在为止还挺好.但经过几次迭代后,会发生以下情况:
> cntr <- cntr + 0.05; cntr;
[1] 0.1
> cntr == 0.1
[1] TRUE
> cntr <- cntr + 0.05; cntr;
[1] 0.15
> cntr == 0.15
[1] FALSE
Run Code Online (Sandbox Code Playgroud)
发生了什么,为什么?cntr返回的值是0.15,但它不等于这个值?进一步调查显示:
> cntr < 0.1500000000000001
[1] TRUE
> cntr < 0.15000000000000001
[1] FALSE
Run Code Online (Sandbox Code Playgroud)
和
round(cntr,2)== 0.15 [1] TRUE
我误解了什么,或者有什么我没有看到的东西?任何帮助将不胜感激.谢谢.
你必须使用isTRUE(all.equal(cntr, x)),其中x是0.1,0.05等.由于浮点舍入错误,您的测试失败.all.equal测试平等直到该错误.查看R Inferno的 Circle 1,了解这可能会让您失望的其他示例.
| 归档时间: |
|
| 查看次数: |
277 次 |
| 最近记录: |