2013-08-29 2 views
-1

주어진 tempMaxAngle보다 작은 90 그림의 제수를 찾는 함수를 작성하려고합니다. 예를 들어, 내 함수는 tempMaxAngle = 7의 경우 6을 반환하고 tempMaxAngle = 31의 경우 30, tempMaxAngle = 23의 경우 22.5 등을 반환해야합니다. 불행히도 올바르게 작동하지 않습니다. 이상한 값을 얻고 있습니다. tempMaxAngle = 7 (동안 섹션 결과)에 대한matlab은 모듈로 함수에 대해 잘못된 결과를 나타냅니다.

function maxAngle = angletest(tempMaxAngle) 
    format long g; 
    tempMaxAngle = tempMaxAngle*10; 
    tempMaxAngle = floor(tempMaxAngle)/10; 
    while mod(90,tempMaxAngle)>0 
     modResult =mod(90,tempMaxAngle) 
     tempMaxAngle = tempMaxAngle - 0.1 
    end 
    maxAngle=tempMaxAngle; 
end 

부분 결과 : 여기 내 algorythm입니다

tempMaxAngle = 

        6.9 


modResult = 

    0.299999999999995 


tempMaxAngle = 

        6.8 


modResult = 

     1.59999999999999 


tempMaxAngle = 

        6.7 


modResult = 

     2.89999999999998 


tempMaxAngle = 

        6.6 


modResult = 

     4.19999999999998 


tempMaxAngle = 

        6.5 


modResult = 

     5.49999999999998 


tempMaxAngle = 

        6.4 


modResult = 

    0.399999999999966 


tempMaxAngle = 

        6.3 


modResult = 

     1.79999999999996 


tempMaxAngle = 

        6.2 


modResult = 

     3.19999999999997 


tempMaxAngle = 

        6.1 


modResult = 

     4.59999999999996 


tempMaxAngle = 

        6 


modResult = 

     5.99999999999995 


tempMaxAngle = 

        5.9 


modResult = 

     1.49999999999994 


tempMaxAngle = 

        5.8 


modResult = 

     2.99999999999993 


tempMaxAngle = 

        5.7 


modResult = 

     4.49999999999993 


tempMaxAngle = 

     5.60000000000001 


modResult = 

    0.399999999999929 

간단 6.9, 6.8, 6.7 등 대신 값의 종류를 returing 유지하는 이유 모듈로 함수와 유사합니까? 어떻게 해결할 수 있습니까?

+0

살펴 왜 당신이'모드 (90,7)을 수행하지 않는'직접? – Oleg

+0

왜냐하면 나는 다른 값을 위해서 사용하고자하는 함수이기 때문입니다. – Arxas

+0

이제 질문을 읽어야합니다 : find is 'x ≤ tempAngle'은 90을 균등하게 나눕니다. – Oleg

답변

5

내부 부동 표현에 약간의 오류가 있기 때문입니다.

matlab double comparison

+0

고맙습니다. sd_round 기능은 제가 필요로하는 기능입니다. – Arxas

관련 문제