読者です 読者をやめる 読者になる 読者になる

Pebble Coding

プログラマーの作業メモ

swiftでFloat値の比較

swift

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))
}