swiftでFloat値の比較
swiftでは次のような演算子が定義されているので、FloatどうしやDoubleどうしの比較は
単純に==と!=で行えば良い。
FloatやDoubleはFloatingPointを継承しているため、この機能を持っている。
public func ==<T : FloatingPoint>(lhs: T, rhs: T) -> Bool public func !=<T : Equatable>(lhs: T, rhs: T) -> Bool
C言語ではFLT_EPSILON,DBL_EPSILONなどを使っていたが、
swiftのこのメソッドにはこの機能が組み込まれている。
func testFloat() { XCTAssert(Float(10.0) == Float(10.0)) XCTAssert(Float(10.0) == Float(10.000000000000000000001)) XCTAssert(Float(10.0) == Float(10.00000000000000000001)) XCTAssert(Float(10.0) == Float(10.0000000000000000001)) XCTAssert(Float(10.0) == Float(10.000000000000000001)) XCTAssert(Float(10.0) == Float(10.00000000000000001)) XCTAssert(Float(10.0) == Float(10.0000000000000001)) XCTAssert(Float(10.0) == Float(10.000000000000001)) XCTAssert(Float(10.0) == Float(10.00000000000001)) XCTAssert(Float(10.0) == Float(10.0000000000001)) XCTAssert(Float(10.0) == Float(10.000000000001)) XCTAssert(Float(10.0) == Float(10.00000000001)) XCTAssert(Float(10.0) == Float(10.0000000001)) XCTAssert(Float(10.0) == Float(10.000000001)) XCTAssert(Float(10.0) == Float(10.00000001)) XCTAssert(Float(10.0) == Float(10.0000001)) XCTAssert(Float(10.0) != Float(10.000001)) XCTAssert(Float(10.0) != Float(10.00001)) XCTAssert(Float(10.0) != Float(10.0001)) XCTAssert(Float(10.0) != Float(10.001)) XCTAssert(Float(10.0) != Float(10.01)) XCTAssert(Float(10.0) != Float(10.1)) } func testDouble() { XCTAssert(Double(10.0) == Double(10.0)) XCTAssert(Double(10.0) == Double(10.000000000000000000001)) XCTAssert(Double(10.0) == Double(10.00000000000000000001)) XCTAssert(Double(10.0) == Double(10.0000000000000000001)) XCTAssert(Double(10.0) == Double(10.000000000000000001)) XCTAssert(Double(10.0) == Double(10.00000000000000001)) XCTAssert(Double(10.0) == Double(10.0000000000000001)) XCTAssert(Double(10.0) != Double(10.000000000000001)) XCTAssert(Double(10.0) != Double(10.00000000000001)) XCTAssert(Double(10.0) != Double(10.0000000000001)) XCTAssert(Double(10.0) != Double(10.000000000001)) XCTAssert(Double(10.0) != Double(10.00000000001)) XCTAssert(Double(10.0) != Double(10.0000000001)) XCTAssert(Double(10.0) != Double(10.000000001)) XCTAssert(Double(10.0) != Double(10.00000001)) XCTAssert(Double(10.0) != Double(10.0000001)) XCTAssert(Double(10.0) != Double(10.000001)) XCTAssert(Double(10.0) != Double(10.00001)) XCTAssert(Double(10.0) != Double(10.0001)) XCTAssert(Double(10.0) != Double(10.001)) XCTAssert(Double(10.0) != Double(10.01)) XCTAssert(Double(10.0) != Double(10.1)) }