2016-05-03 13 views
-3

私はTFDTableコンポーネントをDelphi Seattleで使用しています。私はデザイン時にこのテーブルコンポーネントを保持しています。TFDTableの浮動小数点不正確結果例外

TFDTable(コンポ).Openを実行中

ます(Ctrl + F7) "0042F353で浮動小数点不正確な結果を" デバッグ中に私はグーグルが、その理由を得なかったがエラーが出ますそれが正確に何かを得る。

提案がありますか?

参考URL:

http://www.delphigroups.info/2/e8/524771.html

浮動小数点不正確な結果

は、この例外を使用すると、FPUの "損失の精度の" マスクビットがOFFになっ を持っていることを示唆しています。 は通常ONです。システム変数 Default8087CWで$ 0020ビットを探し、制御語に0x20のORingを Set8087CW(Default8087CWまたは$ 0020)文で試してみてください。グローバル変数としてDefault8087CW、ライブラリ、あるいは独自のコードによって悪用される可能性がありますし、FP計算または予期しないの予期しない結果を引き起こす方法でいつでも変更することはよく知られている問題があり

http://www.umiacs.umd.edu/~resnik/ling645_sp2002/cmu_manual/node19.html

+0

あなたが得意ではないものは何ですか?より具体的でコピーしてください。参照したい関連行を貼り付けてください(ソースリンクはそのままにしてください)。ここに関連するテキストがなければ、あなたの質問は将来の読者にとって無益になるかもしれません。 IMO、私は*あなたがそれが何であるかを明確に述べると信じています。 –

+0

どのようなドライバを使用していますか?あなたが戻ってくるデータの性質は何ですか?どのテーブルでも、特定のテーブルだけでエラーが発生しますか?あなたはそのテーブルのコピーを開こうとしましたが、データは一切ありませんでしたか?問題は、ドライバ、オープンしようとしているテーブルのサポートされていない機能、または正しく処理されていないテーブルの値です。 –

+0

ヘルプが必要な場合に、読者が問題を再現できるように、十分な詳細でqに実際のコードを表示する必要があります。 TFDTable(Compo)。明らかに実際のコードではありません。 – MartynA

答えて

1

例外が発生する可能性があります。 8087 FPU Control wordの6つの最下位ビットは、マスクビットです。ビットが設定されている場合、対応する例外はマスクです。これは発生しません。

John Herbsterが話している "精度の損失"マスクビットは、Delphis TArithmeticException列挙型のexPrecisionというビットの1つです。さらに彼は、このビットがSet8087CW(Default8087CW or $0020)と呼ぶことによって設定されることを保証することを提案する。

var 
    OldExceptionMask: TArithmeticExceptionMask; 
... 
OldExceptionMask := SetExceptionMask(GetExceptionMask + [exPrecision]); 

TFDTable(Compo).Open前に上記の呼び出し:あなたは、Delphi 10シアトルを使用しているので、64ビットのハードウェア上の対応SSEマスクも等しく扱うため、代わりに(System.Mathユニットから)SetExceptionMask()関数を使用することが推奨されますあなたの問題を解決するはずです。

この関数は、TArithmeticExceptionMaskTArithmeticExceptionのセット)を受け取り、返します。他のすべての例外列挙およびFPU/SSE関連関数はdocumentationにあります。

関連する問題