Enc*_*ira 5 ruby floating-point rspec
以下测试中的第3个失败:
specify { (0.6*2).should eql(1.2) }
specify { (0.3*3).should eql(0.3*3) }
specify { (0.3*3).should eql(0.9) } # this one fails
Run Code Online (Sandbox Code Playgroud)
这是为什么?这是浮点问题还是ruby或rspec问题?
Dav*_*sky 12
截至rspec-2.1
specify { (0.6*2).should be_within(0.01).of(1.2) }
Run Code Online (Sandbox Code Playgroud)
在那之前:
specify { (0.6*2).should be_close(1.2, 0.01) }
Run Code Online (Sandbox Code Playgroud)
问题是0.3和0.9都没有浮点格式的精确表示1,所以当乘以0.3*3时,得到一个非常非常接近0.9的数字,并且打印时将舍入为0.9,但是不是0.9.
你的0.9常数也不是精确的0.9,这两个数字略有不同.
对浮点数使用精确的相等比较通常是任何语言的错误.
1.所有整数至多约2 52具有确切FP表示,但级分组成的序列的1/Ñ条款.大多数小数字符串分数在基数2中重复.
| 归档时间: |
|
| 查看次数: |
1714 次 |
| 最近记录: |