2013-08-29 2 views
-1

Я пытаюсь создать функцию, отвечающую за поиск делителя на 90 фигур меньше заданного tempMaxAngle. Например, моя функция должна возвращать 6 для tempMaxAngle = 7 или 30 для tempMaxAngle = 31 или 22.5 для tempMaxAngle = 23 и т. Д. К сожалению, он работает неправильно - я получаю странные значения. Вот мой алгоритм:matlab дает неправильный результат для функции modulo

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 

частичный результат для tempMaxAngle = 7 (в то время как результат раздела):

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 

Почему он держит returing такого рода значений вместо простой 6,9, 6,8, 6,7 и т.д. и аналогичные для модульной функции? Как я могу это исправить?

+0

Почему вы не делаете 'мод (90,7)' напрямую? – Oleg

+0

Потому что это функция, которую я хотел бы использовать для других значений, а не только 7. – Arxas

+0

Теперь я задаю вопрос, он должен прочитать: find 'x ≤ tempAngle', который равномерно делит 90. – Oleg

ответ

5

Это связано с небольшими ошибками во внутреннем плавающем представлении.

Взгляните на matlab double comparison

+0

Большое спасибо, функция sd_round - это то, что мне нужно. – Arxas

Смежные вопросы