2013-04-30 2 views
1

어떤 숫자가 더 가까운 지 어떻게 알 수 있습니까? 내 값이 "1"이고 두 개의 var, A : = 1.6 및 b : = 1.001을 가지고 있다고 가정하십시오. 현재 숫자가 약간이고 0.1 % +/- 차이와 +/- 0.6 차이를 보이는어느 쪽이 더 가깝습니까

난 그냥 .. 지금까지 .. 코드 시작 값에 가까운 어떤 답변을보고 큰에

또한

아무것도 필요하지 않습니다, 코드를 수동으로 모든 일에서 나를 중지 단지입니다 : D

procedure TForm1.Button1Click(Sender: TObject); 
var 
winlimit,test6high,test6low,test6,test1high,test1low,test1,value: double; 
begin 
value := 1.0; 
while value < 1048567 do 
    begin 
    test6high := value + 0.6 ; 
    test6low := value - 0.6 ; 

    test1high := (-0.1 * value)/100; 
    test1high := value - test1high; 

    test1low := (0.1 * value)/100; 
    test1low := value - test1low; 

    memo1.Lines.Add('value is '+floattostr(value)+': 1% High:'+floattostr(Test1high)+' 1% Low:'+floattostr(Test1low)); 
    memo1.Lines.Add('value is '+floattostr(value)+': 0.6 +/- '+floattostr(Test6high)+' 0.6 Low:'+floattostr(Test6low)); 
    memo1.Lines.Add(' '); 
    value := value*2; 
end 
end; 
+2

당신이'IfThen (ABS (A-B)를 <복근 (A-C), B, C) 의미합니까 '? –

+0

아픈 시도하고 나중에 말해 ..하지만 그 방법을 시도하십시오 .. 메모 라인에 텍스트를 추가, 난 그냥 원래 값에 가까운 값을 표시하고 싶었던 대신 모두 표시하는 것 –

답변

4

제 말은 다음과 같은 함수를 의미한다고 생각합니다 :

function ClosestTo(const Target, Value1, Value2: Double): Double; 
begin 
    if abs(Target-Value1)<abs(Target-Value2) then 
    Result := Value1 
    else 
    Result := Value2; 
end; 
당신이 Math 장치에서 IfThen를 사용하는 경우210

좀 더 간결하게 기록 할 수 있습니다 :

function ClosestTo(const Target, Value1, Value2: Double): Double; 
begin 
    Result := IfThen(abs(Target-Value1)<abs(Target-Value2), Value1, Value2); 
end; 
+0

아 완벽한, 내가 수학 단위를 사용하는 것이 좋습니다 .. 그 IfThen 좋은, 절대 거기에 .. 감사합니다 –

+0

현대 언어로 @GelnMorse 그것은 표준 if-then-else 문을의 일부입니다. 그러나 Delphi는 1973 년의 Pascal Report에 깊이 뿌리를두고 있으며 IF와 CASE의 표현 모드를 가지고 있기 때문에 Borland는 대부분의 일반적인 유형에 대해 RTL 함수 세트를 사용하여 이것을 극복하기로 선택했습니다. –

관련 문제