8

こんにちは、

Jonathan Richard Shewchuk による計算幾何学の堅牢な述語を使用しようとしています 。

私はプログラマーではないので、何を言っているのかよくわかりません。基本的な間違いをしている可能性があります。

ポイントは、述語が適応浮動小数点精度で正確な算術演算を許可する必要があることです。私のコンピューター: Asus pro31/S (Core Due Centrino Processor) では動作しません。問題は、私のコンピュータが浮動小数点精度の改善を使用している可能性があり、Shewchuk で使用されているものと競合する可能性があるという事実にとどまる可能性があります。著者は次のように述べています。

/* On some machines, the exact arithmetic routines might be defeated by the  */
/*   use of internal extended precision floating-point registers.  Sometimes */
/*   this problem can be fixed by defining certain values to be volatile,    */
/*   thus forcing them to be stored to memory and rounded off.  This isn't   */
/*   a great solution, though, as it slows the arithmetic down.              */

今私が知りたいのは、内部の拡張精度浮動小数点レジスタをオフにする方法、おそらく何らかのコンパイラ オプションがあるということです。

私は本当にあなたの助けに感謝します

4

5 に答える 5

3

はい、これを回避するには FPU 制御ワードを変更する必要があります。このWeb ページでは、最も一般的なコンパイラについて詳しく説明されています。これは、ほとんどのライブラリが FPU に期待することとは劇的に互換性がないことに注意してください。混同しないでください。作業が終わったら、必ず FPU コントロール ワードを復元してください。

于 2010-04-02T10:44:31.820 に答える
3

Visual Studio に必要なコンパイラ オプション/fp:strictは、IDE で次のように公開されます。Project->Properties->C/C++->Code Generation->Floating Point Model

于 2010-04-02T09:13:25.427 に答える
2

_control87(_PC_53, _MCW_PC)または_control87(_PC_24, _MCW_PC)トリックを行います。これらは、精度をそれぞれ MSVCdoubleおよびMSVC に設定します。singleを使用する_controlfp_s(...)と、現在のコントロール ワードを設定後に明示的に取得できるようになります。

于 2010-04-02T16:09:30.643 に答える
1

他の人が指摘したように、x87 制御ワードを設定して浮動小数点の精度を制限することでこれに対処できます。ただし、より良い方法は、MSVC に浮動小数点演算用の SSE/SSE2 コードを生成させることです。パフォーマンス上の利点 (そして、あなたが見ているような迷惑なバグに遭遇するのを防ぐという事実) を考えると、この時代にデフォルトでそれが行われないことに驚いていますが、MSVC の説明はありません。特異性。

MSVC についての暴言はさておき、この/arch:SSE2フラグにより​​、MSVC は単精度および倍精度の演算に SSE および SSE2 命令を使用するようになり、問題が解決されるはずです。

于 2010-04-03T03:33:26.543 に答える
0

GCCを使用している場合は、ここでのSOの回答が役立つ可能性があります。

別のコンパイラを使用している場合は、その例でいくつかの手がかりを見つけることができるかもしれません(または、Mike Dinsdaleが知っているかどうかを確認するために、その回答にコメントを投稿することもできます。

于 2010-04-02T08:26:07.063 に答える