バックグラウンド:
値が32ビット浮動小数点数のopcタグがあります。タグは実行中の集計を表します。したがって、ある時点で合計が最大値に達し、0から再開します。タグに関する追加情報は、データ型が単一の浮動小数点数であるが、値は常に整数であるということです(Iタグを作成しなかったので、floatが選択された理由がわかりません)。
私のアプリケーションでは、特定のイベントが発生したときにこの現在の合計の現在の値を記録し、別のイベントが発生したときに合計の現在の値を取得して、差を計算する必要があります。
私が抱えている唯一の問題は、最初の読み取り値を取得するときに値が最大値に近く、2番目の読み取り値を取得する前に0+にロールオーバーすると、差の値が負になることです。
私はこれまでにこれを持っています(それはc#にあります):
float diff (float a, float b) {
if (b < a) {
float f = float.MaxValue - a;
return f + b;
}
return b - a;
}
しかし、aが巨大でない限り、これは機能しません。float.MaxValue--a ==0。誰かが私がこれを解決する方法を知っていますか?