首页 > 解决方案 > 如何有效地对低于或高于测量范围的读数进行编码

问题描述

使用数字变量,对低于或高于仪器提供的范围(例如 TSH < 0.001)的测量结果进行编码的最佳做法是什么?在特定情况下,这是医疗项目所需要的,但预计该问题适用于任何类型的测量。在我自己的研究中,到目前为止我还没有找到令人满意的解决方案。

通常,这类问题在医疗数据格式中得到解决,例如 HL7,但在那里,数值基本上表示为字符串。是否有一种有效的方法来处理数字数据类型(除了一个单独的标志变量,指示结果是否在测量范围的截止值之内、之下或之上)?

这应该是一个独立于所使用的处理器架构并与 Pascal 或 Object Pascal 兼容的跨平台解决方案,但也欢迎使用其他编程语言的优雅解决方案。

标签: delphitypespascalnumericmedical

解决方案


在他们的 IEEE 定义中,这些double值已经具有一些“特殊值”。

0 11111111111 00000000000000000000000000000000000000000000000000002 ≙ 7FF0 0000 0000 000016 
    ≙ +∞ (positive infinity)
1 11111111111 00000000000000000000000000000000000000000000000000002 ≙ FFF0 0000 0000 000016 
    ≙ −∞ (negative infinity)

您可以将这些“标志”重用于低于/高于范围的值。

每种语言都可以识别这些值,例如 Delphi/FPCMath.pas单元定义NegInfinityInfinity如果我没记错的话:

  Infinity    =  1.0 / 0.0;
  NegInfinity = -1.0 / 0.0;

一个好处是它们将被正确地转换为非数字 ( +INF/-INF) 的文本,因此它可能有助于调试和跟踪这些值。

当然,您应该检测并避免使用这些值进行计算(例如平均值/R² 或曲线拟合),这可能会破坏您的计算与正确的值。但是结果很可能明显是错误的(在大多数数学运算中,无穷大会抢占其他值)以至于跟踪这个问题并不难。

检查这篇文章作为参考


推荐阅读