背景:
我有一个 opc 标签,其值为 32 位浮点数。标签代表一个正在运行的计数 - 所以在某些时候总数将达到最大值并从 0 重新开始。关于标签的另一个信息是它的数据类型是单浮点数,但它的值总是一个整数(我没有创建标签,所以我不确定为什么选择浮动)。
在我的应用程序中,当某个事件被触发时,我记录了这个运行总计的当前值,当另一个事件被触发时,我获取总计的当前值,然后需要计算差值。
我唯一的问题是,如果在我进行初始读数时该值接近最大值,然后在我进行第二次读数之前翻转到 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。有谁知道我如何解决这个问题?