我有一个应用程序,在这个应用程序中,我使用了一个特定的类,这个类有一个方法来返回当前经过的时间。
unsigned long long getCurrentElapsedTime(){
}
由于float
在运行一定时间(~1小时)后会包裹(变为世博形式),所以在上述类中使用Unsigned long long
代替float
。早些时候,我使用类中的方法为我的程序返回秒(1.112,1.336等)的float
。
float getElapsedTime(){
}
我在我的程序中使用了上面的方法,如下所示:
float startTime, deltaTime;
starttime = getElapsedTime();
On Some event
deltaTime = getElapsedtime() - startTime;
if(deltaTime > 1.0f){
//do something
}
我现在有这个getCurrentElapsedTime()
方法,它返回unsigned long long
整数给我,直到很长一段时间才包装。我必须在我的应用程序中以类似的方式使用这种方法,我使用浮动,但我很困惑我应该如何将unsigned long long
转换为float
,这样我就不会得到指数格式的数字。对于我的应用程序,我之前使用的float
具有以下格式数字(1.123,2.345,3.737等)
如果我有一个很长的unsigned long long
数字,我试图转换为浮动,我可能会再次得到同样的问题(浮动将在世博形式)我该如何解决这个问题?在小数中是否有类似的东西,我可以从unsigned long long
转换为没有包装问题?
Float不"change"为任何"expo to "。事实上,unsigned long long
会在某个点溢出,并且将换行回0。float
则不会。如果您添加的增量太小,它将不再与之前的float值不同。浮点数是有损的,但它可以表示诸如"infinite"之类的值。长是无损的,但却是有限的。
可能是你的输出函数以一定的比例改变格式。但问题是你如何打印你的数字!
# Don't mind the python syntax, please:
print "Different format strings: %.3f %e %f" % (1.0, 1.0, 1.0)
Different format strings: 1.000 1.000000e+00 1.000000
相同的数字,不同的输出
然而,你的时间源是什么?使用时间源的原生类型(很可能是long
)您不能仅仅通过将其转换为另一种类型来提高精度。