0

私は、SURFアルゴリズムのChris Evans OpenSURF実装を使用して、オブジェクト認識用のアプリケーションを開発しました。いくつかの実験を行っていますが、IDEを介して、または.exeファイルをダブルクリックして直接アプリケーションを起動すると、アルゴリズムが適切に動作しないことに気付きました。.exeファイルが、IDEを介して起動するコードのバイナリコンパイル済みであることを確認しました。SURFアルゴリズムは決定論的であり、同じ入力で常に同じ出力を返す必要があるため、IDEまたは.EXEからアプリを起動する場合、浮動小数点の精度に関連する何かが異なるようです。いくつかの例。1列目と2列目は、画像から抽出されたポイントの数です。3番目の列は、この1番目と2番目の違いです。

EXE VS Diff

17340 17366 -26 Image001

4639 4631 8 Image002

3196 3189 7 Image003

10442 10441 1 Image004

1485 1477 8 Image005

5539 ​​5555 -16 Image006

18102 18073 29 Image007

アルゴリズムとコードがまったく同じである場合、出力が異なる理由を誰でも教えてくれますか?

ありがとう

4

1 に答える 1

2

これは、コードをコンパイルするときに、最適化モードのコンパイルを行う必要があるためです。

最適化モードのコンパイルは、コードを高速化するか短縮するかを決定します。Visual Studioでプロジェクトオプションに移動すると、C / C ++オプションに最適化設定が表示され、コード自体に応じて次のオプションを使用してコードの最大コード最適化を設定します。

1.最適化:最大速度2.組み込み関数を有効にする:はい3.サイズまたは速度を優先する:高速コードを優先する

COdeGenerationオプションには最適化のオプションがあります

浮動小数点モデル:高速

注: 1。これらのオプションは処理を高速化するためのものですが、コードが不安定になる場合があります。

  1. 時間をテストするときは、常にリリースバージョンをビルドしてください。
  2. (Visual StudioのようなIDEからではなく)プログラムexeを個別に実行します。これは、Visual Studioから実行すると、Visual Studioのデバッガーが接続され、実行時間が遅くなるためです。
  3. 常にリリースバージョンのdllを使用してください。
于 2012-11-07T20:12:50.790 に答える