2013-04-17 7 views
0

Я пытаюсь выполнить функцию, используя функцию gettimeofday(). Я могу получить время в микросекундах, но при попытке разделить его на long, чтобы получить время в секундах, мое значение усекается до одного integer. Кто-нибудь знает, почему это происходит? Я предположил, что деление на long = 1000000.0 предотвратит такое усечение.Отдел длинным усеченным - C

Timing функции:

struct timeval t1,t2; 

gettimeofday(&t1, NULL); 

// Computes C - C1 - using single thread 
for (i=0; i < n; i++) 
    for (j=0; j < p; j++) 
    { 
     C1[i][j]=0; 
     for (k=0; k < m; k++) 
      C1[i][j] += A[i][k]*B[k][j]; 
    } 

gettimeofday(&t2, NULL); 

Отдел применяется здесь:

long divider = 1000000.0; 
long elapsed = ((t2.tv_sec - t1.tv_sec) * 1000000.0L) + (t2.tv_usec - t1.tv_usec); 
elapsed = (elapsed/divider); 

printf("Time in seconds: %ld seconds\n", elapsed); 

Любая помощь приветствуется.

+1

Почему вы не используете двойной? long - целочисленный тип. – rerun

+1

Вы знаете, что 'long' является целым типом, не так ли? –

+0

ahhhh, я извиняюсь. Я тестировал его с помощью double, но я не изменял код формата для printf. Спасибо за помощь. –

ответ

3

Long является целочисленный тип означает, что он не будет держать знаков после запятой, вы, вероятно, хотите использовать double для divider и elapsed. Дополнительная информация о cplusplus.com

Обратите внимание, что вам также понадобится %lf до printf.

Коррекция: просто %f, как Printf-формат, по-видимому enough

2

Тип long представляет собой целочисленный тип.

Проблема в том, что вы пытаетесь сохранить результат, который вы хотите быть float (или double) в long.

Есть две проблемы: 1- Ваши операнды никогда не бросают в float/double (неявной гипсе компилятором), так что все промежуточная операция возвращает int или long. 2- Ваш результат long: даже если ваши операнды float/double, ваш результат будет отлит до long.

Что вам нужно: использовать double переменных.

double divider = 1000000.0; 
double elapsed = ((t2.tv_sec - t1.tv_sec) * 1000000.0) + (t2.tv_usec - t1.tv_usec); 
elapsed = (elapsed/divider); 

printf("Time in seconds: %5.5f seconds\n", elapsed); 

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

  • Нет связанных вопросов^_^