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会产生预期的输出。