代码之家  ›  专栏  ›  技术社区  ›  rohancragg

您将使用什么度量单位存储工程数据?

  •  4
  • rohancragg  · 技术社区  · 17 年前

    我担心我们的数据库或.NET数字类型可能存在精度和准确性不足的风险。我还担心,我们可能会看到浮点数学的人工制品(尽管这可能是一个问题本身)。

    例如,源数据可能是以Psi(磅/平方英寸)表示的压力量(并从某些第三方服务中读取)。工程师们会选择这种计量单位,因为(对于所表达的数量而言)这种计量单位将倾向于给出易于理解的、人类可读的数字,而不需要科学的符号。

    当我们“标准化”这个数字时,即当我们将这个数量转换为我们自己的持久性时,我们可能会将它转换为Pa(帕斯卡),这将需要将这个数字乘以或除以其他一些可能较大的数字。

    我们通常会存储非常大或非常小的数字,更糟糕的是,我们可能会对这些数字进行进一步的计算。

    目前我们使用ORACLE float和System.Double。

    使现代化

    进一步的研究发现 Units of Measure support 用即将推出的F#语言(我写的是CTP)。

    我们似乎能够让F#理解用户输入,例如:

    9.81<n/s^2> // an acceleration
    

    我们还可以创建自己的衍生单位和单位系统。

    creating a derived unit for Newtons in F#
    msdn.com )

    5 回复  |  直到 7 年前
        1
  •  6
  •   Ken Gentle    17 年前

    保持 重要人物

    精度与精度不同,在工程单位上执行浮点运算需要在运算过程中考虑到这一点-存储的精度不得超过测量精度,计算中使用的精度不得超过已知精度。


    编辑:

    NUMERIC(p,s)

    如果这不是一种选择,考虑保持特定测量的精度,以便它可以被报告和/或用于计算。

        2
  •  3
  •   Bill the Lizard    17 年前

    使用你给出的将PSI转换为帕斯卡的例子(1 PSI=6 894.75 pa),如果我测量14.7 PSI并将其转换为帕斯卡,我得到101352.825。那太精确了。您需要将其存储为101000,以反映 测量 计算

    请记住,用于转换的任何数字都必须至少与测量值一样精确,以便在转换过程中不会丢失精度。最好在转换系数中比测量值中有更多的精度数字(至少多一个)。

        3
  •  2
  •   Paul Tomblin    17 年前

    我认为工程数据通常不够精确,不必担心差异。你知道工程师的说法“用千分尺测量,用粉笔标记,用斧头切割”。总而言之。担心现实世界中计算出的8位有效数字或12位有效数字与2位有效数字公差之间的差异是没有意义的。

        4
  •  1
  •   Treb    17 年前

    为了避免由于单位转换而导致精度损失,您可以将来自测量的所有数据存储在测量单位中。当然,这意味着您可能最终会将一些压力值存储在Pa中,其他压力值存储在Psi中,甚至是mmHg中。你必须自己决定这是否会带来比解决问题更多的问题。

        5
  •  0
  •   Lasse V. Karlsen    17 年前

    3.15<=x<3.25 .

    推荐文章