2012-02-08 3 views
0

Я нахожусь на K & R книга и на упражнение 3-1. Я думаю, что моя библиотека «time.h» сломана. Сначала я думал, что мой код ошибочен, но когда я проверил решения для упражнения в сети, они тоже не работают.time.h библиотека не работает

Проблема:

Выход программа всегда показывает ноль секунд, и иногда происходит обмен «часы»:

Output 1: 
    Element -1 not found. 
    binsearch() took 10000 clocks (0 seconds) 
    Element -1 not found. 
    binsearch2() took 20000 clocks (0 seconds) 

Output 2: 
    Element -1 not found. 
    binsearch() took 20000 clocks (0 seconds) 
    Element -1 not found. 
    binsearch2() took 10000 clocks (0 seconds) 

Целью программы является сравнение двух функций с точки зрения скорости , Как мне это сравнить?

Вот код теста:

for (i = 0, time_taken = clock(); i < 100000; ++i) { 
    index = binsearch(n, testdata, MAX_ELEMENT); /* all this code is duplicated with a 
}              call to binsearch2 instead */ 
time_taken = clock() - time_taken; 

if (index < 0) 
    printf("Element %d not found.\n", n); 
else 
    printf("Element %d found at index %d.\n", n, index); 

printf("binsearch() took %lu clocks (%lu seconds)\n", 
     (unsigned long) time_taken, 
     (unsigned long) time_taken/CLOCKS_PER_SEC); 

Я попробовал эту программу как в Linux и Windows.

+0

Нет, это не так. Если вы предлагаете снизить итерации до 10-20k, выход переходит в «0 часов» и еще 0 секунд. – 1der

+0

Простите, ошибочно. Напротив, вам нужно увеличить число итераций с большим коэффициентом (по крайней мере, столько же, сколько «CLOCKS_PER_SEC'). – Mat

ответ

1

Возможно, CLOCKS_PER_SEC=1000000 в вашей системе.

Так time_taken/CLOCKS_PER_SEC дает 0, как и ожидалось.

Измените свой код на double(time_taken)/CLOCKS_PER_SEC, чтобы получить с плавающей точкой.

+0

так есть способ отредактировать это? – 1der

+0

Скорее всего, posix требует, чтобы CLOCKS_PER_SEC = 1000000. @ 1der, нет, нет. Преобразуйте часы в миллисекунды вместо секунд. (Примечание: clock() отличается от linux и windows. On linux, clock() измеряет время процессора, на окнах он измеряет время настенных часов) – nos

+0

Оба вы правы, оба они заканчиваются на долю секунды, и поскольку вывод был отформатирован как целое число, он обрезается до нуля. Благодаря! :) – 1der