2014-03-09 2 views
0
long long delta; 
auto oldTime = std::chrono::high_resolution_clock::now(); 
std::vector<int> list; 
for (int i = 0; i < 100; i++) 
{ 

    auto x = i * i/std::pow((double)i/50, 2) ; 
    list.push_back(x); 
    auto now = std::chrono::high_resolution_clock::now(); 
    delta = std::chrono::duration_cast<std::chrono::nanoseconds>(now - oldTime).count(); 
    oldTime = now; 
    std::cout << delta << std::endl; 
} 

delta는 0ns를 취할 수있는 방법을 전체 반복 .. 그러나 결과 중 일부는 0과 동일하며, 많은 NS는, 계산 간단한 방정식의 표시 결과를 삽입하는 데 걸린 보여 가정한다?델타 시간은 항상 0

+4

하드웨어 해상도가 1ns 정확도 또는 해상도가되지 않을 수 있습니다. 당신은 단 한번의 반복만으로 시간을 재는 것이 아니라, 즉시 수백만 번 반복해야합니다. –

+1

그가 말한 것. 마이크로 또는 밀리 세컨드를 사용하고 델타의 기본 유형으로 두 배로 길게는 아니지만 :) ('std :: chrono :: duration ') 아, MSVC를 사용하는 경우 , high_resolution_clock은 끔찍한데, 더 나은 해상도/정확성을 위해 boost_1을 사용하십시오. – melak47

답변

2

약간의 오류가 있습니다.

  1. NS 시간 계에서는 측정 할 수 없습니다. 대부분의 컴퓨터는이를 지원하지 않습니다. 대신 모든 최신 컴퓨터에서 지원되므로 ms로 테스트하십시오.

  2. 콘솔 화면에 데이터를 인쇄하는 것이 느립니다. 루프에서 데이터를 인쇄하기 때문에 거의 반복적이지 않고 루프 당 6-20ms 정도의 속도로 전체 반복 과정을 느리게 진행할 것입니다. 가장 정확한 결과를 얻으려면 루프 밖에서 인쇄 호출 이동 전체 시간을 반복 횟수로 나누면 각 루프에 필요한 시간을 볼 수 있습니다.