首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >检测和固定溢出

检测和固定溢出
EN

Stack Overflow用户
提问于 2009-05-29 04:13:48
回答 6查看 168关注 0票数 0

我们有一个粒子探测器硬连线使用16位和8位缓冲。每隔一段时间,都会有一些预测的粒子通量峰值通过它,这是可以的。不好的是,这些通量通常会超过缓冲器存储它们的能力;因此,会发生溢出。在图表上,它们看起来像通量突然下降,并开始再次增长。您能提出一种最准确的方法来检测数据溢出点吗?

探测器在物理上是无法访问的,因此通过替换缓冲器来“正确地”修复它似乎不是一个选择。

更新:根据请求一些澄清。我们在数据处理设备上使用python;检测器本身使用的技术非常晦涩(就像它是由一个完全不相关的第三方开发的),但是它绝对是简单的,即没有运行一个“真正的”OS,只是一些低级的东西来记录检测器的读数和响应远程命令,比如电源循环。内存损坏和其他问题现在不是一个问题。溢出发生的原因很简单,因为探测器的设计者使用16位缓冲来计算粒子通量,有时流量超过每秒65535粒子。

更新2:正如一些读者所指出的那样,预期的解决方案将与分析通量剖面来检测急剧下降(例如,一个数量级)有关,以试图将它们与正常波动分开。另一个问题是:恢复(原始流量下降到溢出水平以下的点)可以通过简单地运行校正程序来检测反流(x轴)通量剖面吗?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2009-05-29 13:33:10

代码语言:javascript
复制
int32[] unwrap(int16[] x)
{
   // this is pseudocode
   int32[] y = new int32[x.length];
   y[0] = x[0];
   for (i = 1:x.length-1)
   {
      y[i] = y[i-1] + sign_extend(x[i]-x[i-1]);
      // works fine as long as the "real" value of x[i] and x[i-1]
      // differ by less than 1/2 of the span of allowable values
      // of x's storage type (=32768 in the case of int16)
      // Otherwise there is ambiguity.
   }
   return y;
}

int32 sign_extend(int16 x)
{
   return (int32)x; // works properly in Java and in most C compilers
}

// exercise for the reader to write similar code to unwrap 8-bit arrays
// to a 16-bit or 32-bit array
票数 1
EN

Stack Overflow用户

发布于 2009-05-29 04:47:27

当然,理想的情况是,您可以将检测软件的最大值设置为65535,以防止造成您悲痛的那种绕线。我知道这并不总是可能的,或者至少不总是有可能迅速完成的。

当粒子通量超过65535时,是这样快,还是通量逐渐增大,然后逐渐减小?这对您可能用来检测这一点的算法产生了影响。例如,如果通量上升得足够慢:

代码语言:javascript
复制
true flux     measurement  
 5000           5000
10000          10000
30000          30000
50000          50000
70000           4465
90000          24465
60000          60000
30000          30000
10000          10000

那么,当你溢出的时候,你会有一个很大的负值下降。负下降幅度比其他任何时候都大得多。这可以作为一个信号,你已经溢出。若要查找溢出时间周期的结束,可以查找从65535到不太远的值的大幅跳转。

所有这一切都取决于最大的真实通量是可能的,并取决于流量上升和下降的速度。例如,是否有可能在一个测量周期内得到超过128 k的计数?一个测量值可以是5000个,下一个测量值是50000吗?如果数据表现得不够好,你可能只能在统计上判断你什么时候溢水了。

票数 1
EN

Stack Overflow用户

发布于 2009-05-29 04:21:56

您的问题需要提供更多关于您的实现的信息--您使用的是什么语言/框架?

软件中的数据溢出(我认为这就是您所说的)是错误的做法,应该避免。当您看到(奇怪的数据输出)只是一个副作用时,可能发生的数据溢出,但它只是冰山一角,您可以看到的各种问题。

您可以很容易地体验到更严重的问题,如内存损坏,这会导致程序大声崩溃,或者更糟糕的是,不为人所知。

首先,是否可以进行任何验证,以防止溢出?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/924355

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档