不思議な結果を簡単なの浮動小数点-悪いFPU内蔵するのでしょうか。
-
20-08-2019 - |
質問
いソフトウェアプロジェクトも不思議の結果から、簡単な浮動小数点ます。ものがあるのだろうと思っていないといけないと思っていったい何ッションデザイナーやラベルデバッグには次のような問題がある。
(コンパイラの使用は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、今までのチェックをメモリがこの値を読み込みから-することができるコンパイラ/リンカーの問題です。