V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
dhxsy1994
V2EX  ›  C

奇怪的 clock_t

  •  
  •   dhxsy1994 · 2019-04-04 20:00:50 +08:00 · 2487 次点击
    这是一个创建于 2092 天前的主题,其中的信息可能已经有所发展或是发生改变。
     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 条回复    2019-04-05 00:35:08 +08:00
    zmj1316
        1
    zmj1316  
       2019-04-04 20:19:55 +08:00 via Android
    🤣不自己先试一下的吗
    jackmod
        2
    jackmod  
       2019-04-04 20:22:42 +08:00
    位置不对,要这样写:
    (double)(end - start) / CLOCKS_PER_SEC

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

    其实你的问题我觉得 2 楼已经讲清楚了
    应该用浮点除法而不是整数除
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5502 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 07:03 · PVG 15:03 · LAX 23:03 · JFK 02:03
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.