Расхождения между выводом 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;