質問

私たちのアプリでは、現在、SIのデータベースにすべてのエンジニアリングデータを保存するという決定の遺産があります。

データベースまたは.NET数値型に十分な精度と精度がないというリスクが生じる可能性があることを心配します。また、浮動小数点演算のアーティファクトが表示されるのではないかと心配しています(ただし、それ自体が問題である可能性があります)。

たとえば、ソースデータは、Psi(ポンド/平方インチ)で表された(および一部のサードパーティサービスから読み込まれた)圧力量である場合があります。エンジニアは、この表現単位を選択します。これは、表現される量に対して、科学表記法を必要とせずに、簡単に消化できる、人間が読める数値を提供する傾向があるためです。

数値を「標準化」するとき、つまりこの量を永続化するために変換するとき、Pa(パスカル)に変換する場合があります。これは、数値を他の潜在的に大きな数値で乗算または除算する必要があります。

多くの場合、非常に大きなまたは非常に小さな数値を格納することになり、さらに悪いことに、これらの数値についてさらに計算を行う可能性があります。

現在、ORACLE floatとSystem.Doubleを使用しています。

これについてどう思いますか?

更新

さらなる研究により、今後のF#言語での測定単位のサポート(執筆中のCTP)。

次のようなユーザー入力をF#に理解させることができるようです:

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

独自の派生ユニットおよびユニットシステムを作成することもできます。

 F#でニュートンの派生ユニットを作成
(ソース: msdn.com

役に立ちましたか?

解決

有効数字を念頭に置いてください-測定の精度。 PSIが1ポンドのみで知られている場合、Paに変換した後、小数点以下15桁がありますが、有効数字は1つだけです。

精度は精度とは異なり、エンジニアリングユニットで浮動小数点演算を実行するには、演算中にこれを考慮する必要があります-測定の精度よりも高い精度を保存しないでください。知られています。


編集:

精度(桁数)と位取り(小数部の右側の桁数)を明示的に指定できるNUMERIC(p,s)の使用を検討することもできます。

それがオプションではない場合、特定の測定値の精度を維持して、計算で報告および使用できるようにすることを検討してください。

他のヒント

実際の精度と同じ精度で保存できる限り、心配する必要はないと思います。

PSIをパスカルに変換する例(1 PSI = 6 894.75 pa)を使用すると、たとえば14.7 PSIを測定してパスカルに変換すると101,352.825になります。精度が高すぎます。 計算ではなく、測定の実際の精度を反映するために、101,000として保存する必要があります。

変換に使用する数値は、変換中に精度が失われないように、少なくとも測定値と同じ精度である必要があることに注意してください。変換係数には、測定値よりも多くの桁(少なくとも1つ以上)の精度があることが最善です。

エンジニアリングデータは通常、違いを心配するほど正確ではないと思います。エンジニアの表現<!> quot;マイクロメーターで測定し、チョークでマークし、a <!> quot;でカットします。それはそれを要約しています。 8つの有効数字と実際の世界で2つの有効数字の許容差に基づいて計算された12の違いを心配するのは意味がありません。

単位変換による精度の損失を避けるために、測定から得られたすべてのデータを測定元の単位に保存できます。もちろん、一部の圧力値はPaに保存され、他の圧力値はPsi、またはmmHgでも。解決するよりも多くの問題が発生するかどうかを自分で判断する必要があります。

他の回答にも同意します。ほとんどの場合、Oracle floatが提供する精度は、測定自体の精度よりもはるかに高いです。

まあ、それはあなたがどのくらい正確になりたいかによる。エンジニアリングの話をするときよりも、3.2は数字の3.20と同じではないので、3.20を保存するだけでは十分ではありません。 3.20は、3.2よりも高い精度を意味し、 3.15 <!> lt; = x <!> lt; 3.25

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top