War*_*shi 5 nsrange swift swift3
我需要像这样实现经验过滤器
如何在快速范围内表达?
问题是我不能表达超过2至4年.虽然我可以做不到上限.比如这样
let underTen = 0.0..<10.0
Run Code Online (Sandbox Code Playgroud)
我需要这样的东西(大于下限)
let uptoTwo = 0.0...2.0
let twoPlus = 2.0>..4.0 // compiler error
Run Code Online (Sandbox Code Playgroud)
目前我在做
let twoPlus = 2.1...4.0
Run Code Online (Sandbox Code Playgroud)
但这并不完美.
dfr*_*fri 11
nextUp来自FloatingPoint协议您可以利用的nextUp财产Double,如blueprinted FloatingPoint协议到Double符合
下一部影片
比较大于此值的最不可表示的值.
对于任何有限值
x,x.nextUp大于x....
即:
let uptoTwo = 0.0...2.0
let twoPlus = 2.0.nextUp...4.0
Run Code Online (Sandbox Code Playgroud)
在您的问题的评论中已经提到了该协议中已ulp蓝图的该属性FloatingPoint.对于大多数数字,这是self下一个更大的可表示数字之间的差异:
ULP
自我最后的单位.
这是有效数字中最低有效数字的单位
self.对于大多数数字x,这是x下一个更大(大小)可表示数字之间的差异....
nextUp确实,在本质上,返回的值self与添加ulp.因此,对于上面的示例,以下内容是等效的(而nextup在此用例中,imo 应该是首选).
let uptoTwo = 0.0...2.0
let twoPlus = (2.0+2.0.ulp)...4.0
Run Code Online (Sandbox Code Playgroud)
您可能还需要考虑twoPlus使用upperBound前面uptoTwo范围的属性替换下限文字:
let uptoTwo = 0.0...2.0 // [0, 2] closed-closed
let twoPlus = uptoTwo.upperBound.nextUp...4.0 // (2, 4] open-closed
if uptoTwo.overlaps(twoPlus) {
print("the two ranges overlap ...")
}
else {
print("ranges are non-overlapping, ok!")
}
// ranges are non-overlapping, ok!
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3063 次 |
| 最近记录: |