반응형
BcdDivide 함수는 Delphi XE 및 XE2에서 다르게 작동합니다.
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
변수는 C
63 개의 소수점 이하 자릿수가있는 Bcd 값이 포함됩니다. 제 수행 BcdMultiply
변수를 조작하여 C
보관합니다 Bcd overflow error
.
그러나 Delphi XE에서 동일한 코드를 실행하면 예외 프롬프트없이 다음과 같은 결과가 나타납니다.
0.3333333333
0.11111111108888888889
누구 든지이 문제를 해결하기위한 모범 사례 방법을 제안 해 주시겠습니까?
질문의 코드는 XE2 업데이트 4에서 예상되는 출력을 생성합니다. 업데이트 3은 잘못된 출력을 생성 업데이트 4와 함께 수정 사항이 도착했습니다. 또한 XE3는 예상 출력을 생성합니다.
반응형
'ProgramingTip' 카테고리의 다른 글
LAPACK을 사용하여 Cython 기반 확장 배포 (0) | 2020.11.12 |
---|---|
AvalonEdit : 계단식 HighlightingColorizers (0) | 2020.11.12 |
Visual Studio Code에서 엿보기 (0) | 2020.11.12 |
사용자 자격 증명을위한 Android 키 체인 (0) | 2020.11.12 |
Sun JDK의 소스 코드는 어디에서 볼 수 있습니까? (0) | 2020.11.11 |