аналог MathMax только на большее число переменных

 
Подскажите аналог MathMax только на большее число переменных.
 
Можно все переменные скинуть в массив и...
double num_array[15]={4,1,6,3,9,4,1,6,3,9,4,1,6,3,9};
int    maxValueIdx=ArrayMaximum(num_array);
Print("Max value = ", num_array[maxValueIdx]);
 
MathMax(MathMax(MathMax(x4,x3),x2),x1)

и так далее
 

Integer:

и так далее

MathMax(MathMax(MathMax(x4,x3),x2),x1)

 


 Ого. Интересно, как по производительности такой подход "ударит".
 
hoz:

 Ого. Интересно, как по производительности такой подход "ударит".
Операции с числами не влияют на "производительность" так, как логические операции, особенно, если затесался алогизм. И вообще, производительность прибыли с лихвой покроют недостаточную прооизводительность в скорости! :)
 

Если важна производительность, то MathMax лучше не использовать, т.к. он медленней обычной конструкции  if (a>b) x=a; else x=b;

Поэтому если переменных много, то можно использовать эту конструкцию в цикле. А если не много, то последовательно проверять каждую переменную.

 
Meat:

Если важна производительность, то MathMax лучше не использовать, т.к. он медленней обычной конструкции  if (a>b) x=a; else x=b;

Поэтому если переменных много, то можно использовать эту конструкцию в цикле. А если не много, то последовательно проверять каждую переменную.

Конечно, но разговор завели о MathMax. if() else больше всего и употребляем.

Алексей, как Вы думаете, и в этом случае лучше одно выражение с MathMax'ами заменить на конструкцию с if?

double dist = MathMax(MathMax(NormalizeDouble(Dist*Point,Digits),spread),MathMax(StopLevel,FreezeLevel));//это заменить?
// на это?
double dist = NormalizeDouble(Dist*Point,Digits);
if(spread > StopLevel && spread > FreezeLevel && spread > dist) dist = spread;
if(spread < StopLevel && spread < FreezeLevel)
{
  if(StopLevel > FreezeLevel && StopLevel > dist) dist = StopLevel;
  if(StopLevel < FreezeLevel && FreezeLevel > dist) dist = FreezeLevel;
}


 
borilunad:

Конечно, но разговор завели о MathMax. if() else больше всего и употребляем.

Алексей, как Вы думаете, и в этом случае лучше одно выражение с MathMax'ами заменить на конструкцию с if? 

Что-то Вы накрутили тут столько всего лишнего. Проще ведь такой вариант:

double dist = NormalizeDouble(Dist*Point,Digits);
if (dist < spread) dist= spread;
if (dist < StopLevel) dist= StopLevel;
if (dist < FreezeLevel) dist= FreezeLevel;
 
Meat:

Что-то Вы накрутили тут столько всего лишнего. Проще ведь такой вариант:

 

Снял вопрос. Понял, что параметр принимает другое значение, потому не надо сравнивать их между собой. Спасибо большое!
 
borilunad:
А как узнать, что больше?
В смысле?
 

Впрочем ко всему надо подходить с рациональной точки зрения. Например в данном случае вряд ли есть необходимость в такой оптимизации скорости программы, ведь StopLevel, FreezeLevel, spread и Point не меняются в процессе выполнения рабочего цикла, т.е. их не нужно пересчитывать на каждой итерации. А значит переменную dist достаточно посчитать всего один раз, перед началом цикла. Поэтому проще использовать вариант с MathMax, т.к. он сэкономит 3 строчки кода :)  Хотя конечно немаловажна также и читаемость кода, но тут уже надо смотреть индивидуально, удобен ли MathMax(MathMax...) для восприятия.