在Python中,time.time()*1000是否足够精确?

在Python中,time.time()*1000是否足够精确?,python,time,precision,Python,Time,Precision,我想在python中捕获亚秒精度的时间戳。看起来标准答案是int(time.time()*1000) 但是,如果time.time()返回一个浮点值,您不会有精度问题吗?有些值不能准确表示为浮点 我担心一些分数时间不能正确地表示为浮点,在这些情况下,时间戳向前或向后跳跃 这是一个合理的担忧吗 如果是这样的话,需要做些什么?您希望精度有多高?虽然确实存在不能表示为有限二进制分数的有限十进制分数,但只要程序运行时间不超过143千毫秒(2**52毫秒),最接近的近似值将舍入到正确的整数毫秒数 简言之:

我想在python中捕获亚秒精度的时间戳。看起来标准答案是
int(time.time()*1000)

但是,如果
time.time()
返回一个浮点值,您不会有精度问题吗?有些值不能准确表示为浮点

我担心一些分数时间不能正确地表示为浮点,在这些情况下,时间戳向前或向后跳跃

这是一个合理的担忧吗


如果是这样的话,需要做些什么?

您希望精度有多高?虽然确实存在不能表示为有限二进制分数的有限十进制分数,但只要程序运行时间不超过143千毫秒(2**52毫秒),最接近的近似值将舍入到正确的整数毫秒数


简言之:我认为您不必为此担心浮点精度。不过,您可能需要担心系统计时器的准确性、精度或单调性。

如果是用于性能测量,那么您可以使用是否有特定的原因不想直接保留时间的结果。时间?乘以非2的幂肯定会弄乱你的“精度”;最好是保留你得到的,然后只在最后取整或截断。例如,
starttime=time.time();DoStuff();现在=时间。时间();已用=现在-开始时间;elapsedms=int(1000*appeased)
我实际上是在尝试将度量值放入时间“桶”中。所以我需要取一些绝对时间,除以一个周期长度,然后把测量值扔进桶里。但我担心,在这种计算中,一些测量值会落入错误的桶中。然而,听起来我很好;显示的误差非常小,自然舍入可以解决它。好吧,见下文。我想找一个例子,我输入的第一个例子是>>>int(1.001*1000)\1000,所以我必须强制使用>>>int(1.001*1000+.1)\1001进行一点舍入“最接近的近似值将舍入到正确的数字”。。。因此,我认为这是正确的答案,但要注意的是,我必须确保进行一些舍入。所以我将使用int(time.time()*1000+0.1)(参见上面注释中的示例)。如果你能挑毛病,请告诉我!因为我不想一半上升一半下降。我真的想截断——考虑第一个毫秒开始一个新的桶。真的,因为我已经很挑剔了,所以我应该做一些像int(time.time()*1000+0.0001)这样的事情,这样我得到的唯一的结果就是浮点精度错误。