delphi - 如何有效地对低于或高于测量范围的读数进行编码
问题描述
使用数字变量,对低于或高于仪器提供的范围(例如 TSH < 0.001)的测量结果进行编码的最佳做法是什么?在特定情况下,这是医疗项目所需要的,但预计该问题适用于任何类型的测量。在我自己的研究中,到目前为止我还没有找到令人满意的解决方案。
通常,这类问题在医疗数据格式中得到解决,例如 HL7,但在那里,数值基本上表示为字符串。是否有一种有效的方法来处理数字数据类型(除了一个单独的标志变量,指示结果是否在测量范围的截止值之内、之下或之上)?
这应该是一个独立于所使用的处理器架构并与 Pascal 或 Object Pascal 兼容的跨平台解决方案,但也欢迎使用其他编程语言的优雅解决方案。
解决方案
在他们的 IEEE 定义中,这些double
值已经具有一些“特殊值”。
0 11111111111 00000000000000000000000000000000000000000000000000002 ≙ 7FF0 0000 0000 000016
≙ +∞ (positive infinity)
1 11111111111 00000000000000000000000000000000000000000000000000002 ≙ FFF0 0000 0000 000016
≙ −∞ (negative infinity)
您可以将这些“标志”重用于低于/高于范围的值。
每种语言都可以识别这些值,例如 Delphi/FPCMath.pas
单元定义NegInfinity
,Infinity
如果我没记错的话:
Infinity = 1.0 / 0.0;
NegInfinity = -1.0 / 0.0;
一个好处是它们将被正确地转换为非数字 ( +INF/-INF
) 的文本,因此它可能有助于调试和跟踪这些值。
当然,您应该检测并避免使用这些值进行计算(例如平均值/R² 或曲线拟合),这可能会破坏您的计算与正确的值。但是结果很可能明显是错误的(在大多数数学运算中,无穷大会抢占其他值)以至于跟踪这个问题并不难。
检查这篇文章作为参考。
推荐阅读
- angular - Angular 组件之间的数据流问题
- c++ - 我可以使用 Podofo 或 libHaru 从 PDF 图像文件中获取字节数组吗?
- javascript - 防止 Elementor Multi-Step Form textarea 自动更改为下一步
- flutter - Flutter PaginatedDataTable Future 因链接请求而失败
- graphql - 我的 apollo graphql 订阅用例是否有保证?
- python - 例外:您似乎正试图从广播变量、操作或转换中引用 SparkContext
- java - 未为 Log 类型定义方法 fail(String)
- c# - DinkToPDF pdf 结果与 HTML 不同
- php - 如果在 li 元素中找到类,则将 HTML 添加到字符串部分的开头和结尾
- android - Android Chromecast:ExpandedControlActivity 给出 SQLiteDatabaseException