Ответ 1
Вы можете просто делить на 50, взять ceil() и снова умножить на 50:
octave:1> A=[24, 35, 78, 101, 199];
octave:2> ceil(A)
ans =
24 35 78 101 199
octave:3> 50*(ceil(A/50.))
ans =
50 50 100 150 200
Я могу объединить элементы A
с ближайшими целыми числами, большими или равными A
ceil(A)
Но как насчет того, хочу ли я округлить его до ближайшего 50, большего или равного A
?
Например, учитывая следующий массив A
,
A=[24, 35, 78, 101, 199];
Подпрограмма должна возвращать следующие
B=Subroutine(A)=[50, 50, 100, 150, 200];
Вы можете просто делить на 50, взять ceil() и снова умножить на 50:
octave:1> A=[24, 35, 78, 101, 199];
octave:2> ceil(A)
ans =
24 35 78 101 199
octave:3> 50*(ceil(A/50.))
ans =
50 50 100 150 200
Простым способом является просто добавить каждое дополнение числа по модулю 50:
octave> A = [24, 35, 78, 101, 199]
octave> mod(-A, 50) # Complement (mod 50)
ans =
26 15 22 49 1
octave> A + mod(-A, 50) # Sum to "next higher" zero (mod 50)
ans =
50 50 100 150 200
octave> A - mod(A, 50) # Can also sum to "next lower" zero (mod 50)
ans =
0 0 50 100 150
(Обратите внимание, что это зависит только от целочисленной арифметики, что позволяет избежать ошибок из-за округления с плавающей запятой.)