2011-08-16 60 views
6

有可能測量std::clock()呼叫的分辨率嗎?或者這是一個問題,觀察沒有影響是不可能的?測量`std :: clock()的分辨率`

我寫了下面天真基準:

#include <ctime> 
#include <iostream> 

int main() { 
    std::clock_t initial = std::clock(); 
    std::clock_t current; 
    while (initial == (current = std::clock())); 
    std::cout << "Initial: " << initial << std::endl; 
    std::cout << "Current: " << current << std::endl; 
    std::cout << "Precision: " << (static_cast<double>(current - initial)/CLOCKS_PER_SEC) << "s" << std::endl; 
} 

我已經運行了幾百倍,它總是輸出0.01s

我的問題是:

  • 是上面的代碼來衡量的clock()分辨率的好辦法?
  • 如果沒有那麼它有什麼問題呢?怎麼能改進?
+1

「準確性」是什麼意思?如果沒有提到另一個「適當」時鐘,你將如何衡量? –

+0

每次在第一個循環中都會中斷嗎? – James

+1

@Kerrek SB你正在解釋我的問題。 – StackedCrooked

回答

2

你可以,有點。像你在做什麼是一個好的第一個近似值。但我不確定它是多麼有用:它決定了 分辨率,但它仍然沒有告訴你任何關於精度的信息; 在Windows下,例如,clock是如此不準確,以至於使其無法使用 。