2014-08-28 4 views
0

может ли кто-нибудь сказать мне, что произойдет, если я пропущу двойной в нижних строках?ошибка в времени выполнения расчета программы c?

time_spent = (double)(end - begin)/CLOCKS_PER_SEC; 

Я пытался вычислить время выполнения моей задачи сортировки и забыл приведение к двойному. Код работал почти 90 минут, но время вывода было «270.000006». Может ли кто-нибудь помочь мне разобраться, что это означает?

Также иногда отображаются значения «-ve». Любое решение этой проблемы.

EDIT - Сортировка 10^9 и 10^10 номеров, поэтому код будет работать в течение нескольких часов.

+0

Как вы получаете конец и начать значения и какие они? –

+0

Я использовал тот же код, как указано ниже в статье Debasish. – Anurag

ответ

5

Если код работает почти 90 минут, вы получите переполнение типа clock_t на 32-битной архитектуре менее чем за 72 минуты. Я верю, что это ваше дело.

+0

есть все равно, чтобы избежать этого переполнения? – Anurag

+0

@Anurag В запуске, который вы уже сделали, я думаю, вы могли бы попытаться выяснить, насколько он переполнен (предположим, что он переполнен «один раз»), а затем предположим, что его значение + max val. Для будущего исправления вы, конечно, должны сохранить его в переменной, которая может соответствовать результату. – Jite

+0

@Jite. Долго ли удвоится? – Anurag

0

Правильное использование является:

clock_t begin, end; 
    double time_spent; 

    begin = clock(); 
    /* actual task that needs to be monitored */ 
    end = clock(); 
    time_spent = (double)(end - begin)/CLOCKS_PER_SEC; // in seconds 

Вы измеряете процессорное время здесь, не прошедшее время, которое включает в себя время ввода/вывода, а также. CLOCKS_PER_SEC - это константа, объявленная в. Вычисление должно выполняться в арифметике с плавающей запятой. Другой альтернативой вычислению времени является использование команды времени.

Read How to log the time taken for a unix command?

+0

Он знает, что это не то, о чем он просил. Он спросил, что произойдет, если он ** не ** сохранит его/приведёт к двойному. – Jite

+0

Если вы не прибегаете к двойному типу, тогда вы теряете точность из-за целочисленной арифметики –

+0

Да или что еще хуже, переполнение, и это больше похоже на ответ на его вопрос. – Jite

Смежные вопросы