BCDDivide函数在Delphi XE和XE2中performance不同
FmtBcd.pas
在Delphi XE2中进行了大量修改。 在我的一个项目中,我有一个使用两个Bcd
值的除法操作的例子,但是这两个版本产生不同的结果。 在最坏的情况下,Delphi XE2可能会抛出Bcd overflow error
。
示例:在Delphi 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
variablesC
包含具有63位小数位的Bcd值。 对variablesC
执行第二次BcdMultiply
操作将导致Bcd overflow error
。
但是,在Delphi XE中运行相同的代码将得到以下结果,而不会有任何exception提示:
0.3333333333 0.11111111108888888889
任何人都可以请build议一个最佳实践的方法来解决这个问题?
问题中的代码会在XE2更新4中产生预期的输出。请注意,更新3会产生错误的输出,因此显然修复是在更新4时到达的。此外,XE3会产生预期的输出。