我正在编写一个非常简单的程序来计算数字的阶乘。
这是:
import time
def factorial1(n):
fattoriale = 1
while (n > 0):
fattoriale = fattoriale * n
n = n - 1
return fattoriale
start_time = time.clock()
factorial1(v)
print float(time.clock() - start_time), "seconds"
奇怪的一点(对我来说)是执行时间(在一个值上)的结果:
1°运行:0.000301秒
2°运行:0.000430秒
3°运行:0.000278秒
为什么你认为它变化如此? 它是否与浮点型近似有关?
谢谢,Gianluca
答案 0 :(得分:1)
它可能与资源共享有很大关系。如果您的程序作为一个单独的进程运行,它可能必须同时争用计算机上运行的其他进程,这些进程正在使用CPU和RAM等资源。这些资源也被其他进程使用,因此获得'它们在并发术语方面将花费可变时间,特别是如果有一些高优先级进程与它并行运行,而其他事情如interupts可能具有更高的优先级。
至于你的想法,据我所知,近似过程不应该采用可变时间,因为它运行确定性算法。然而,近似过程可能不得不争用资源。
答案 1 :(得分:1)
在基于Unix的系统上,time.clock返回CPU时间,而不是挂钟时间。
您的程序是确定性的(即使是打印件),理想的系统应始终在相同的时间内运行。我相信在您的测试中,您的程序被中断并且执行了一些中断处理程序或者调度程序暂停了您的进程并将CPU提供给其他进程。当允许您的进程再次运行时,CPU缓存可能已被其他进程填充,因此处理器需要再次将内存中的代码加载到缓存中。这需要花费少量时间 - 您在测试中会看到这一点。
为了很好地量化程序的速度,你应该考虑不要只调用factorial1一次,而是调用数千次(或者输入值更大)。当您的程序运行多秒时,与您测试的测试时间不到一毫秒相比,调度效果的影响较小(相对)。