質問

いソフトウェアプロジェクトも不思議の結果から、簡単な浮動小数点ます。ものがあるのだろうと思っていないといけないと思っていったい何ッションデザイナーやラベルデバッグには次のような問題がある。

(コンパイラの使用はMS VC6.0、12版のMicrosoft Cコンパイラ)

最初の異常:

extern double Time, TimeStamp, TimeStep;  // History terms, updated elsewhere
void timer_evaluation_function( ) {
    if ( ( Time - TimeStamp ) >= TimeStep ) {  
        TimeStamp += TimeStep;  
        timer_controlled_code( );  
    }
{....}

何らかの理由でタイマーの評価に失敗したとのタイムコードのない実行されます。のデバッガにあり、trigの状態がtrueでのFPUを拒否を探黒字化した要因は何ですか?次のコードセグメントが問題なのですが、同事業です。この問題はsidestepped挿入することにより偽造評価できる可を確認してください。

私は推測でのFPUの状態がどことなく汚れる前に実行される操作は、あるコンパイラフラグのような役割が期待?

第二に異常:

double K, Kp = 1.0, Ti = 0.02;
void timed_code( ){
    K = ( Kp * ( float ) 2000 ) / ( ( float ) 2000 - 2.0F * Ti * 1e6 )
{....}

その結果、#INDものの、デバッガの評価の方程式を約0.05.の#工業値が表示されるFPUのスタックの時2.0F値が読み込まれるFPUのfld。前の指示荷重を整数値として2000年ダブルフロートを用いfild。までのFPUのスタックを含む#工業価値すべてを失ったものの、再びデバッガのない問題を評価する式です。その後、これらの操作を返しれます。

また、一度のFPUの問題が発生直後の機能ます。ばいいの挿入の浮動小数点をクリアにFPU後の状態がそれぞれの新しい機能しているのでしょうか。がコンパイラフラグに影響を及ぼす可能性のあるFPUますか?

していただいたことに感謝して一切のtips and tricksます。

編集:いる問題を回避するために呼び出しによる組み立て機能EMMS一の機能です。このFPUはクリアされずMMX関連するゴミが作成されている環境で自分のコードと呼びます。この状態FPUはないものに与えられます。

//フランク

役に立ちましたか?

解決

を使用している場合、windowsのQueryPerformanceCounterとQueryPerformanceFrequency機能を支えるシステムMMXうに挿入し、femms指示を問い合わせた後、加入者の周波数カウンター前に計算である。

__asm femms

またトラブルからこれらの機能がったということで64ビットの計算を用いMMXな清算に浮動小数点のフラグの状態です。

こうした状況も起こりがある場合には64ビット演算との間の浮動小数点ます。

他のヒント

その問題の役割を果たすことができるのがx86、法令を解除FPU.ることをテストするために、理論を挿入することができるこのどこかにコード:

__asm {
    finit
}

で不明な点があれば、ここでお答えがいを見つのレイモンド-陳の記事に関する不思議なFPU活動しています。そしてこのご質問や再読み込みのんですぐに参照リンクがアコードまに貼り付けは完全ではない場合や記事をお考えの一周辺の行動によ号---具体的には、だDLL読み込みであります。

初期化されていない浮動小数点数指定することができ必殺

どうして無効にな浮動小数点演算子の例外を取得しておきたい障がいのですか?

がんを提供する厳密解にもたらされたと考えられるこれを開始すること 記述するための異なる最適化できます。

re:タイムスタンプ--

あけましておめでとうございまって、お客ソースのタイムスタンプ。何か音けられない。みログインしてファイルです。

の場合の値が読み込まれるfldる負荷2.0、今までのチェックをメモリがこの値を読み込みから-することができるコンパイラ/リンカーの問題です。

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