我正在从事一个项目,该项目没有确定的算法来使用 C 语言解决。我正在使用蒙特卡罗技术来解决这个问题。而随机猜测的次数我想限制在用户指定的执行时间内。 这意味着我想充分利用用户定义的执行时间限制(作为命令行参数)来进行尽可能多的随机迭代。 我可以检查循环条件的执行时间吗?
for(trials=0;execution_time<specified_time;trials++)
如果是这样,我该怎么做? 或者如果还有其他方法,欢迎。谢谢。
附言我使用 Code Blocks 10.05 进行编码和 GNU 编译器。
最佳答案
是的,如果您的计算机上有足够细粒度的时钟(并且您有)。
记录模拟开始的时间。
对于循环中的每一次旅行,找到当前时间以及开始时间和现在之间的相应增量。如果该值大于限制,则停止。
如果您使用具有一秒粒度的 time()
,请注意量化效果。如果用户说“1 秒”,如果您的程序在 T=N.999s 开始并在 T=(N+1).001s 停止,您可能会运行一小部分秒。任何量子都可能产生相同的效果,但由于微秒和纳秒是正常的亚秒级粒度,因此量子的大小不再是问题。
我知道的高分辨率时钟函数有:
- clock_gettime() - POSIX(纳秒)
- gettimeofday() - POSIX(微秒)
- times() - Unix 系统 V(每秒 CLK_TCK)
- ftime() - 古代 Unix(毫秒)
- 时钟() - ISO C - (CLOCKS_PER_SEC)
- time() - ISO C -(秒)
关于c - 在 C 中限制程序的执行时间(蒙特卡罗技术),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4705696/