2012-02-03 6 views
66

FmtBcd.pasは、Delphi XE2で大幅に改訂されました。私のプロジェクトの1つでは、2つの値に2つの除算演算を使用するケースがありますが、2つのバージョンが異なる結果をもたらします。最悪の場合、Delphi XE2はBcd overflow errorを投げることがあります。BcdDivide関数の動作がDelphi XEおよびXE2で異なる

例:デルファイXE2コンソールアプリケーションで次のコードを実行する:上記の

var A, B, C, D: TBcd; 
begin 
    A := StrToBcd('1'); 
    B := StrToBcd('3'); 
    BcdDivide(A, B, C); 
    WriteLn(BcdToStr(C)); 

    try 
    BcdMultiply(C, C, D); 
    WriteLn(BcdToStr(D)); 
    except 
    on E: Exception do 
     WriteLn(E.Message); 
    end; 

    ReadLn; 
end. 

出力は次のようになります

0.333333333333333333333333333333333333333333333333333333333333333 
BCD overflow 

変数Cは、特異性の63の小数点以下とBCD値を含みます。変数Cで第2のBcdMultiply操作を実行すると、Bcd overflow errorが発生します。デルファイXEで同じコードを実行するために、しかし

は、任意の例外プロンプトせずに次の結果が得られます。

0.3333333333 
0.11111111108888888889 

誰もがこの問題を解決するためのベストプラクティスの方法を提案してくださいもらえますか?

+4

これはXE2のバグであること以外は何も言い切れません。 –

+8

私はhttp://qc.embarcadero.com/wc/qcmain.aspx?d=103106に報告しました –

+1

Win32またはWin64用にコンパイルされた場合、同じ結果が得られますか? –

答えて

5

問題のコードは、XE2アップデート4で予想される出力を生成します。アップデート3では、出力が悪くなり、アップデート4で修正が到着したことに注意してください。また、XE3は期待される出力を生成します。

関連する問題