Аналогичный вопрос был задан во время тестирования программы на должность разработчика программного обеспечения. Через два дня у меня все еще нет ответа.
Предположим, у нас есть функция, которая принимает два числа с плавающей точкой в качестве входных данных, и она не имеет побочных эффектов и выполняется детерминистически (также рассмотрим однопоточную среду). Например. 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);
После проверки результата, тест действителен / пройден. Какое у вас объяснение? Я знаю, что printf для отладки может быть сложным, но ... это был вопрос, который мне задали.