在软件开发人员职位的编程测试中也提出了类似的问题。两天后我仍然没有答案。
假设我们有一个函数,它接受两个 float 作为输入并且它没有任何副作用并且确定性地执行(也考虑单线程环境)。例如。 bool test(float arg1, float arg2);
为了测试它,假设我们使用任意大量的随机输入。该功能很少失败,但它失败了。假设我们用这段代码来测试:
//Set a,b
if(test(a,b)){
printf("Test passed\n");
} else {
printf("%f %f\n", a,b);
}
因此,在捕获打印的输入后,我们像这样使用这些输入:
a = //Fill from the printf
b = //Fill from the printf
boolean a = test(a,b);
验证a的结果后,测试有效/通过。你有什么解释?我知道用于调试的 printf 可能很棘手,但是...这是我被问到的问题。
最佳答案
带有 %f
说明符的
printf
不会打印超过 7 位十进制数字,以避免给人留下比实际更准确的印象。
我的猜测是,其中一个输入是这样的,当它通过 printf
打印出来,然后由编译器读回时,结果会略有不同。
关于使用 C 中的单元测试进行更正,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4709007/