floating-point - 您将使用什么计量单位来存储工程数据?

标签 floating-point precision units-of-measurement

在我们的应用程序中,我们目前决定将所有工程数据存储在 SI 中的数据库中。

我担心我们可能会面临在我们的数据库或 .NET 数字类型中没有足够的精度和准确度的风险。我还担心我们可能会看到浮点数学的产物(尽管这可能是一个问题)。

例如,源数据可能是以 Psi(磅每平方英寸)表示(并从某些 3rd 方服务读入)的压力量。工程师会选择这种度量单位,因为(对于所表达的数量)这将倾向于提供易于消化、人类可读的数字,而无需科学记数法。

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

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

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

人们对此有何看法?

更新

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

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

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

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

creating a derived unit for Newtons in F#
(来源: msdn.com )

最佳答案

牢记重要数字——测量的准确性。如果 PSI 已知只有整磅,那么转换为 Pa 后有 15 位小数,仍然只有一位有效数字。

精度与精度不同,在工程单位上执行浮点运算需要在操作期间考虑到这一点 - 不要存储比测量精度更高的精度,不要在计算中使用比已知精度更高的精度。

编辑:

您还可以考虑使用 NUMERIC(p,s),其中可以明确指定精度(位数)和小数位数(小数点右侧的位数)。

如果这不是一个选项,请考虑保留特定测量的准确性,以便可以报告和/或在计算中使用它。

关于floating-point - 您将使用什么计量单位来存储工程数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/343732/

相关文章:

c - 如何使用 Arb 库获得更高精度的正弦波?

java - 为什么 MySQL 的 float 与 Java 的 float 不同?

c++ - 提示输入 double 并读入直到用户正确输入 float

matlab - 你如何处理 Matlab 中的精度问题?

html - em是如何计算的?

r - 是否可以将 ggplot 与 R 中的单位包一起使用?

PHP 将任何千克量转换为可读的公制单位

actionscript-3 - 将十六进制字符串转换为单精度 ActionScript 3.0

floating-point - 实数相乘时如何避免下溢?

java - 在java中以一定精度显示 double