ProgramingTip

BcdDivide 함수는 Delphi XE 및 XE2에서 다르게 작동합니다.

bestdevel 2020. 11. 12. 19:25
반응형

BcdDivide 함수는 Delphi XE 및 XE2에서 다르게 작동합니다.


FmtBcd.pasDelphi 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

변수는 C63 개의 소수점 이하 자릿수가있는 Bcd 값이 포함됩니다. 제 수행 BcdMultiply변수를 조작하여 C보관합니다 Bcd overflow error.

그러나 Delphi XE에서 동일한 코드를 실행하면 예외 프롬프트없이 다음과 같은 결과가 나타납니다.

0.3333333333
0.11111111108888888889

누구 든지이 문제를 해결하기위한 모범 사례 방법을 제안 해 주시겠습니까?


질문의 코드는 XE2 업데이트 4에서 예상되는 출력을 생성합니다. 업데이트 3은 잘못된 출력을 생성 업데이트 4와 함께 수정 사항이 도착했습니다. 또한 XE3는 예상 출력을 생성합니다.

참고 URL : https://stackoverflow.com/questions/9122646/bcddivide-function-behave-differently-in-delphi-xe-and-xe2

반응형