Потолок до ближайшего 50

Я могу объединить элементы A с ближайшими целыми числами, большими или равными A

ceil(A)

Но как насчет того, хочу ли я округлить его до ближайшего 50, большего или равного A?

Например, учитывая следующий массив A,

A=[24, 35, 78, 101, 199];

Подпрограмма должна возвращать следующие

B=Subroutine(A)=[50, 50, 100, 150, 200];

Ответ 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

Ответ 2

Простым способом является просто добавить каждое дополнение числа по модулю 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

(Обратите внимание, что это зависит только от целочисленной арифметики, что позволяет избежать ошибок из-за округления с плавающей запятой.)