V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
dhxsy1994
V2EX  ›  C

奇怪的 clock_t

  •  
  •   dhxsy1994 · Apr 4, 2019 · 3181 views
    This topic created in 2579 days ago, the information mentioned may be changed or developed.
     11 int main()
     12
     13 {
     14     clock_t start;
     15     clock_t end;
     16
     17     start = clock();
     18     sleep(10);
     19     end = clock();
     20
     21     double total;
     22      total = (double)((end - start) / CLOCKS_PER_SEC);
     23     printf("total = %f\n",total);
     24 }
     25
    

    这样写代码居然输出是 0.000000 把老板的 FPGA 速度测错了,我觉得我老板会降低对我的印象了 唉

    5 replies    2019-04-05 00:35:08 +08:00
    zmj1316
        1
    zmj1316  
       Apr 4, 2019 via Android
    🤣不自己先试一下的吗
    jackmod
        2
    jackmod  
       Apr 4, 2019
    位置不对,要这样写:
    (double)(end - start) / CLOCKS_PER_SEC

    (end - start) 是整数,先转换它,而不是先除以一个巨大的数字再转换。
    HFcbyqP0iVO5KM05
        3
    HFcbyqP0iVO5KM05  
       Apr 4, 2019
    sleep 也有可能被 interrupt 导致提前返回,此时返回的是剩余的时间
    jackmod
        4
    jackmod  
       Apr 4, 2019   ❤️ 1
    然而我用 clock 得到的结果也不对(以前似乎遇到过这个问题来着),考虑换用 clock_gettime 吧。
    https://linux.die.net/man/3/clock_gettime
    https://gist.github.com/pfigue/9ce8a2c0b14a2542acd7
    ryd994
        5
    ryd994  
       Apr 5, 2019 via Android   ❤️ 1
    本来就应该用 gettime 这种情况下应该用 CLOCK_MONOTONIC

    其实你的问题我觉得 2 楼已经讲清楚了
    应该用浮点除法而不是整数除
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   846 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 33ms · UTC 21:21 · PVG 05:21 · LAX 14:21 · JFK 17:21
    ♥ Do have faith in what you're doing.