4

私は機械工場の検査員です。別のインスペクタによって生成された html レポートがあり、修正が必要な問題があります。これは初めてではありません。PowerShellとよりも優れたものが必要ですRegEx。(インターネットの戦士を恐れるな。HTML に使用すべきではないことはわかっている。現在RegEx使用してHtmlAgilityPackいる。)

SO やインターネット全般で同様の議論がたくさんあることは承知しています。これほど具体的なものは見つかりませんでした。これのいくつかをテストするためにいくつかの小さな実験アプリを書くことができます (そして私は計画しています) が、すべてを実装する前に将来的に安全であるかどうかについて考えたいと思っています. 私は本業のプログラマーではありませんが、私たちが話している概念をよく理解しています。私の頭の上で話すことを心配しないでください。

一連の変換で、.0001 以上のエラーが発生する可能性はありますか? .00001はどうですか?
-レポートの配置がずれている場合は、複数回回転および翻訳する必要がある場合があります。
-現時点では回転と移動のみを実装していますが、操作の数と複雑さが増す可能性のある変換をさらに追加する予定です。
-整数コンポーネントは数千に達する可能性があります。
- 当社の機器は通常、.0001 の認証を受けています。科学的測定のための通常の有効数字規則が適用されます。

トリガー関数のオーバーヘッドDecimalと手動での記述は非常に時間がかかりますか (編集: 実行時)?
- 通常、レポートには 100 ~ 100 点があります。各ポイントは、実際にはNominal(モデル化された) およびActual(測定された) 2 つのポイント
です。

副次的な質問:とを保持
するポイント クラス があります。各データ ポイントはこれらのうちの 2 つ (と.) であるため、2 つのインスタンスを持つクラス があります。煩わしいほど長くないよりも優れた名前が必要です。Point3DxyzNominalActualMeasuredPointPoint3DMeasuredPoint

そうそう、これは C#/.Net です。ありがとう、

4

6 に答える 6

5

Decimal で三角関数を実装しないでください! 標準ライブラリがそれらを提供しないのには理由があります。これは、三角関数を実行している場合、Decimal は追加の利点を提供しないためです。

とにかくラジアンで作業するので、値は PI の倍数/比率として定義されますが、これはどの基本システムでも表現できません。表現を 10 進法に強制すると、エラーが減少するよりも増加する可能性が高くなります。

アプリケーションで精度 (ulps 単位の最小誤差) が重要な場合は、David Goldberg 著の What Every Computer Scientist Should Know About Floating-Point Arithmeticを読む必要があります。その記事は、私が説明するよりもはるかに優れた説明をしています。

ただし、必要な精度が小数点以下 5 桁のみの場合、32 ビット浮動小数点数 (IEEE-754 単精度) で十分です。64 ビット double IEEE-754 倍精度は、誤差項をより正確にするのに役立ちますが、128 ビット base-10 浮動小数点値は単にパフォーマンスを低下させる過剰であり、ほぼ確実に精度を向上させることはありません。あなたの結果の 1 イオタ。

于 2010-01-27T19:18:31.467 に答える
3

複数の操作で精度を維持する必要がある場合は、Decimal の使用を検討する必要があります。数値を短時間保持することは問題ないかもしれませんが、IEEE754 に基づく float 形式は、適用される操作の数が増えるにつれて、その値を無期限に保持することはできません。

于 2010-01-27T18:09:17.383 に答える
1

ニーズに対応できるライブラリを探してみてください。中途半端な検索でW3b.sineに出くわしました。私は過去に間違いなく他の人に会ったことがあります。

于 2010-01-27T18:43:41.650 に答える
1

回転と平行移動、および三角関数について話しているので、話している値が0.0001 の 正確な倍数ではないと想定しても安全だと思われます。

この仮定に基づいて:

  • 小数では、基本的に各ステップの後に 0.0001 (または選択した精度) に丸められ、これらの丸め誤差が累積されます。

  • 一般に、Double 値の方が正確です。使用可能なすべての精度で内部的に保存し、結果を表示するときに小数点以下 4 桁に丸めます。

たとえば、回転または変換の結果として、1/3 (0.333....) の距離だけ移動したいとします。そして、この動きを 3 回繰り返します。

距離を小数点以下 4 桁 (0.3333) の 10 進数として保存すると、合計は 0.9999 になり、0.0001 のエラーになります。

double として格納すると、はるかに高い精度を達成でき、ボーナスとしてパフォーマンスが向上します。

実際には、小数は通常、財務計算にのみ使用されます。その場合、結果は小数点以下 10 桁の固定数に正確に丸める必要があります。

于 2010-01-27T18:59:33.897 に答える
0

率直に言って、データ処理において FLOAT は間違った順番だったと思います。人々は 10 進数で作業し、出力は常に 10 進数に変換されるため、float は常に問題を引き起こします。以前は、変数が 1E-9 から 1E9 の範囲のように幅広い値を保持できる場合に float を使用し、それ以外の場合はコードで管理される小数点以下の桁数が固定された整数を使用していました。最近では、Java BigDecimal クラスや他の言語の同様の機能により、float を使用する理由はほとんどありません。おそらく、多くの計算を行い、パフォーマンスが問題になる環境では、丸めの問題を受け入れるでしょう。少なくとも 10 年間、プログラムで float を使用したことはないと思います。

于 2010-01-27T19:00:50.307 に答える