2013-03-08 177 views
-2

我有一个应用程序,在该应用程序中我使用某个具有方法的类来返回当前流逝的时间给我。使用无符号long long而不是float来防止打包

unsigned long long getCurrentElapsedTime(){ 
} 

Unsigned long long代替float在上述类,因为在一定时间(约1小时)后运行float涡卷(变更博览会形式)。 早些时候,我使用的是从我的程序返回float秒(1.112,1.336等)的类中的方法。

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转换为没有进入包装问题?

+0

指数形式不是使用'float's的问题,它只是'iostream'做出关于用户希望看到什么样的格式的假设。 – 2013-03-08 08:30:15

+0

你为什么现在想回到花车?只要把所有的时间保持在长整数。 – 2013-03-08 08:31:01

+1

1 - 目前还不清楚你的'转换'应该是什么样子。一个'unsigned long long'是一个整数,你为什么要把它转换为一个浮点数? 2 - 当打印浮动图案时,您可以摆脱exp符号,但这会导致尾随零点,从而产生不存在的精度印象。 3 - 无论如何,exp-notation有什么问题? – us2012 2013-03-08 08:31:22

回答

0

浮动不会“改变”任何“博览会”。实际上,unsigned long long会在某一点溢出,并且包回0. 0 float不会。如果您添加的增量太小,它将与以前的浮点值无关。浮动是有损的,但它可以表示诸如“无限”之类的值。长期无损,但有限。

这可能是你的输出函数,它改变了一定比例的格式。但这是你如何打印你的号码!

# 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)仅通过将其转换为另一种类型,您无法提高精度。

+0

并不重要,但你是Python的过时:-)。在C++中,当然,'std :: cout << 1.0 << std :: fixed << 1.0 <<'<< << std :: scientific << 1.0 << std :: endl;''。 (你还应该提到'float'不会_wrap_,永远不会''unsigned long long'。) – 2013-03-08 08:56:31

相关问题