Написал «на коленке» функцию для увязывания полученной из расчета неточной длины с другой данной длиной таким образом, чтобы первая укладывалась во второй целое количество раз, ну да это не важно, функция простецкая:
A - данная большая длина, в которую «укладываем» неточную меньшую, которая задается диапазоном В допустимых значений: например, от 1 до 2.7 с шагом 0.01.
function equalize(A,B)
for i = B
quo = A / i;
if quo - fix(quo) == 0
disp([num2str(i), " поместится в А ", num2str(quo)," раз"]);
endif
endfor
endfunction
Вызываем:
> equalize(9,[2.7:-0.01:1])
2.25 поместится в А 4 раз
>
Попробуем по-другому:
> equalize(9,[3:-0.01:1])
3 поместится в А 3 раз
2.25 поместится в А 4 раз
1.8 поместится в А 5 раз
1.5 поместится в А 6 раз
1 поместится в А 9 раз
>
> equalize(9,[1:0.01:2.7])
1 поместится в А 9 раз
1.5 поместится в А 6 раз
1.8 поместится в А 5 раз
2.25 поместится в А 4 раз
>
В чем дело? Почему спотыкается на некоторых диапазонах? [2.8:-0.01:1] выдает 2.25 и 1, но пропускает 1.8 и 1.5
Scilab выдает тоже самое (сначала писал на нем, но после долгих мучений, чтобы убедиться, что у меня не едет крыша, переписал на octave, его здесь и привел, т.к. октава, кажется, популярнее)