Исправление с использованием модульного тестирования в C - PullRequest
0 голосов
/ 17 января 2011

Аналогичный вопрос был задан во время тестирования программы на должность разработчика программного обеспечения. Через два дня у меня все еще нет ответа.

Предположим, у нас есть функция, которая принимает два числа с плавающей точкой в ​​качестве входных данных, и она не имеет побочных эффектов и выполняется детерминистически (также рассмотрим однопоточную среду). Например. 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 для отладки может быть сложным, но ... это был вопрос, который мне задали.

Ответы [ 2 ]

3 голосов
/ 17 января 2011

printf со спецификатором %f не печатает более 7 десятичных цифр, чтобы избежать впечатления большей точности, чем на самом деле.

Я полагаю, что один из входных данных таков, что когда он распечатывается с помощью printf, а затем возвращается обратно компилятором, результат немного отличается.

2 голосов
/ 17 января 2011

Значения в a и b могут иметь более значимые цифры, чем напечатано printf, что делает проблему точности.

...