它似乎是一个IEEE问题
但我并不认为-0.2 + 0.1会合格-0.0999999999999996
所以我正在做的是创建(-3,-3)到(3,3)的坐标图,其间隔为0.1。我可以通过舍入结果来简单地解决这个问题(当只有小数超过1时,我可以通过舍入来增强它)
我希望我没有必要,因为它会在每个循环上添加检查,并且运行3721次。
for x in stride(from: min, to: max + 0.1, by: 0.1) {
for y in stride(from: min, to:max + 0.1, by: 0.1) {
let rounded_x = Double(round(x * 1000) / 1000)
let rounded_y = Double(round(y * 1000) / 1000)
print("\(rounded_x), \(rounded_y)")
coordinates[Coordinate(x: rounded_x, y: rounded_y)] = []
}
}
更奇怪的是,这只发生在-0.2 + 0.1,这里是内循环的完整输出:
3.0, -3.0
3.0, -2.9
3.0, -2.8
3.0, -2.7
3.0, -2.6
3.0, -2.5
3.0, -2.4
3.0, -2.3
3.0, -2.2
3.0, -2.1
3.0, -2.0
3.0, -1.9
3.0, -1.8
3.0, -1.7
3.0, -1.6
3.0, -1.5
3.0, -1.4
3.0, -1.3
3.0, -1.2
3.0, -1.1
3.0, -1.0
3.0, -0.9
3.0, -0.8
3.0, -0.7
3.0, -0.6
3.0, -0.5
3.0, -0.4
3.0, -0.3
3.0, -0.2
3.0, -0.0999999999999996
3.0, 0.0
3.0, 0.1
3.0, 0.2
3.0, 0.3
3.0, 0.4
3.0, 0.5
3.0, 0.6
3.0, 0.7
3.0, 0.8
3.0, 0.9
3.0, 1.0
3.0, 1.1
3.0, 1.2
3.0, 1.3
3.0, 1.4
3.0, 1.5
3.0, 1.6
3.0, 1.7
3.0, 1.8
3.0, 1.9
3.0, 2.0
3.0, 2.1
3.0, 2.2
3.0, 2.3
3.0, 2.4
3.0, 2.5
3.0, 2.6
3.0, 2.7
3.0, 2.8
3.0, 2.9
3.0, 3.0
我不确定为什么会在步幅函数中出现这种情况,但是在添加-0.2 + 0.1时却不会这样,这就是我很好奇的事情。