Расхождения между выводом g++ и выводом Visual Studio. Переменные с плавающей точкой

Я тестирую с помощью функции clock_t в C++, и я столкнулся с проблемой. Когда я компилирую, я делаю это на 2 разных компиляторах. Visual studio на моем компьютере с Windows 7 (2012) и g ++ в системе Unix под названием "ranger". Когда я только что скомпилировал свой код, пытаясь вывести время в секундах (до тысячной доли секунды), которое требуется для запуска различных функций сортировки, кажется, что компилятор g ++ полностью игнорирует мою попытку разделить отметку времени на 1000 в Чтобы преобразовать его из миллисекунд во второй формат. Любой совет? Есть ли разница между g ++ и компилятором Visual Studio по этому поводу?

Короткий фрагмент кода (Вывод и что я делаю для деления):

//Select Sort

begin = clock(); //Begin time
selectionSort(array, n);
end = clock(); //End time
d_select = ((float)(end/1000.0) - (float)(begin/1000.0)); //Calculates the time in MS, and converts from MS, to a float second.

//Output data
cout << setprecision(3) << fixed; //Set precision to 3 decimal places, with a fixed output (0's are displayed regardless of rounding)
cout << n << "\t" << d_bubble << "\t" << d_insert << "\t" << d_merge << "\t" << d_quick << "\t"
    << d_select << endl;

Вывод Visual Studio (правильный):

n       Bubble      Insert      Merge       Quick       Select  
100000  12.530      1.320       0.000       0.030       2.900

Unix-вывод (неверный):

n       Bubble      Insert      Merge       Quick       Select  
100000  51600.000   11700.000   30.000      150.000     18170.000

Какие-либо предложения? Спасибо!

1 ответ

Решение

Поделить на CLOCKS_PER_SEC, не 1000. На Unix и POSIX в целом, clock() дает значение в микросекундах, а не в миллисекундах.

Обратите внимание, что это и clock_tявляются целыми числами; так что если вы хотите использовать доли секунды, перед делением преобразуйте в формат с плавающей запятой:

d_select = float(end - begin) / CLOCKS_PER_SEC;
Другие вопросы по тегам