안녕하세요~
간단한 문제같으면서도 해결방법이 생각나지 않아 질문을 올립니다..
1,250,000 / 30 * 18 을 했을경우 제대로 계산했을때에는
749,999.999999...로 나와야 되는게 정상입니다.
trunc및 int등으로 절사를 무지(?) 애써봐도 나오는값은 745,000이더군여..
윈도우계산기등에서 계산했을경우에도 마찬가지로
745,000 이 나옵니다..
과연 이값을 749,999 로 나오게하는방법은 없는지 답변 부탁드립니다..
간단한것 같으면서도..애매하네요..
가장 오차가 많은것이 실수계산인데요. 다음과 같이 80x87 Control Word를 셋팅하고
사용해보세요. 유효숫자는 소수점 한자리입니다.
procedure Set80x87ControlWord (const CtrlWord: Word); assembler;
var
TempWord: Word;
asm
mov [TempWord], ax
fldcw [TempWord] // Load 80x87 Control Word
end;
var
R: Real; // Single, Double, Extended형 사용, Currency형은 효과 없음.
begin
Set80x87ControlWord($1072);
R := 1250000 / 30*18;
// Format('%.18F', [R]); ==> R = 749999.971050192896000000 (소수점 18자리까지)
// Real, Single, Double, Extended형 특성상 소수점 한자리 이하는 믿을게 못됩니다.
// Currency형은 소수점 네째자리까지가 유효숫자입니다.
end;
^^ 항상 즐코하세요.
조복기 wrote:
>
> 안녕하세요~
> 간단한 문제같으면서도 해결방법이 생각나지 않아 질문을 올립니다..
>
> 1,250,000 / 30 * 18 을 했을경우 제대로 계산했을때에는
> 749,999.999999...로 나와야 되는게 정상입니다.
> trunc및 int등으로 절사를 무지(?) 애써봐도 나오는값은 745,000이더군여..
>
> 윈도우계산기등에서 계산했을경우에도 마찬가지로
> 745,000 이 나옵니다..
>
> 과연 이값을 749,999 로 나오게하는방법은 없는지 답변 부탁드립니다..
> 간단한것 같으면서도..애매하네요..