首页 > 解决方案 > 为什么我在 Xcode 单元测试中遇到错误的浮点运算问题?

问题描述

我正在为一个测试时间值的函数编写单元测试。当我手动测试该功能时,它似乎可以正常工作,但是当我使用 Xcode 的单元测试功能对其进行测试时它会失败。我进行了调查,问题似乎与单元测试算法有关。这是单元测试代码:

- (void)testValidTime {
    for (double a = 0.0f; a < 25.0f; a++) {
        for (double b = 0.0f; b < 0.65f; b += 0.01f) {
            double c = a + b;
            if (a > 23.0f || b > 0.59f) {
                XCTAssertFalse([TimeClass timeIsValid:c], "Test failed - Time passed as valid %f",c);
            } else {
                XCTAssertTrue([TimeClass timeIsValid:c], "Time failed - Time failed as invalid %f",c);
            }
        }
    }
}

有趣的是,如果我单步执行代码,加法 (c) 的结果将被格式化为错误消息中的正确答案(例如 0.590000) - 但如果我检查 c 实际包含的内容,它会显示为 0.589999974。如果我不能信任调试器(或测试功能),我还能信任什么!?

任何想法都非常感激。

标签: objective-cxcodeunit-testing

解决方案


推荐阅读