-2

現在の経過時間を返すメソッドを持つ特定のクラスを使用しているアプリケーションがあります。

unsigned long long getCurrentElapsedTime(){
}

Unsigned long long一定時間(約1時間)実行した後にラップ(博覧会形式に変更)するfloatため、上記のクラスの代わりに使用されます。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()返すこのメソッドを持っています。アプリケーションでfloatを使用したのと同じ方法でこのメソッドを使用する必要がありますが、指数形式の数字を取得しないように変換する方法がわかりませんunsigned long long。私のアプリケーションでは、以前は次の形式の数字(1.123、2.345、3.737など)を使用していました。unsigned long longfloatfloat

非常に長いunsigned long long数をfloatに変換しようとすると、おそらく同じ問題が再び発生します(floatはexpo形式になります)。この問題に対処するにはどうすればよいですか。unsigned long longラッピングの問題に陥ることなく変換できる小数の類似したものはありますか?

4

1 に答える 1

0

フロートは、どの「expo fo」にも「変化」しません。実際、unsigned long long意志はある時点でオーバーフローして 0 に戻ります。Afloatそうではありません。追加する増分が小さすぎると、以前の float 値と変わらなくなります。float は不可逆ですが、「無限」などの値を表すことができます。long は無損失ですが、有限です。

特定のスケールでフォーマットを変更するのは、おそらく出力関数です。しかし、それはあなたの数字をどのように印刷するかの問題です!

# 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ます。これを別のタイプに変換するだけでは精度を向上させることはできません。

于 2013-03-08T08:31:58.873 に答える