Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/119.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios XCTASSERTEQUALW精度不工作_Ios_Objective C - Fatal编程技术网

Ios XCTASSERTEQUALW精度不工作

Ios XCTASSERTEQUALW精度不工作,ios,objective-c,Ios,Objective C,有人能帮我回答为什么这个断言失败了吗 XCTAssertEqualWithAccuracy (1.56, 1.57, .01, @""); 虽然这个有效 XCTAssertEqualWithAccuracy (1.56, 1.57, .02, @""); 我认为1.56比1.57差+-.01,所以它不应该失败。你认为是错误的。你用十进制数字思考,但用浮点数。在浮点运算中,1.56与1.57相差超过0.01,因为这些数字都不能准确表示。试试这个: #define printf(...) CFS

有人能帮我回答为什么这个断言失败了吗

XCTAssertEqualWithAccuracy (1.56, 1.57, .01, @"");
虽然这个有效

XCTAssertEqualWithAccuracy (1.56, 1.57, .02, @"");

我认为1.56比1.57差+-.01,所以它不应该失败。

你认为是错误的。你用十进制数字思考,但用浮点数。在浮点运算中,1.56与1.57相差超过0.01,因为这些数字都不能准确表示。试试这个:

#define printf(...) CFShow([NSString stringWithFormat:@""__VA_ARGS__]) // makes it look like C
printf("1.56                 = %.20f", 1.56);
printf("1.57                 = %.20f", 1.57);
printf("0.01                 = %.20f", 0.01);
printf("1.57 - 1.56          = %.20f", 1.57 - 1.56);
printf("(1.57 - 1.56) - 0.01 = %.20f", (1.57 - 1.56) - 0.01);
然后惊叹于你的控制台,它显示

1.56                 = 1.56000000000000005329
1.57                 = 1.57000000000000006217
0.01                 = 0.01000000000000000021
1.57 - 1.56          = 0.01000000000000000888
(1.57 - 1.56) - 0.01 = 0.00000000000000000867

如果你想知道为什么,只需在谷歌上搜索“浮点”,找到许多优秀的解释,并阅读计算的基础知识之一。

因为它们是浮点数。加宽公差值。即0.11