
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Вы глубокий аналитик. Желаю больших достижений
с уважением.
Спасибо за солидарность и развернутое пояснение. Потом проверил исправил выбросил (int). Компьютер выполняет все действия поочередно. И после каждого сложения результат запоминается. В зависимости от оптимизации транслятором запоминать может в регистре (что быстрее), а может в оперативной памяти. В варианте с циклом также могут использоваться регистровые переменные
Стало Alert(100*(1+100)/2);?
А что, здесь действительно есть какие-то действия при исполнении и есть что запоминать в регистре либо в памяти? Компилятор разве не подсчитает выражение 100*(1+100)/2 до запуска программы на исполнение, и вычисление выражение будет заново проводиться во время исполнения, и потребует очереди действий? Я думал, результат вычисления 100*(1+100)/2 будет внесен сразу в код программы как константа. Кто - нибудь в курсе, как эти вопросы решает компилятор MQL?
Стало Alert(100*(1+100)/2);?
А что, здесь действительно есть какие-то действия при исполнении и есть что запоминать в регистре либо в памяти? Компилятор разве не подсчитает выражение 100*(1+100)/2 до запуска программы на исполнение, и вычисление выражение будет заново проводиться во время исполнения, и потребует очереди действий? Я думал, результат вычисления 100*(1+100)/2 будет внесен сразу в код программы как константа. Кто - нибудь в курсе, как эти вопросы решает компилятор MQL?
//+-------------------------------------------------------+ //| Проверка PROBA.mq4| //+-------------------------------------------------------+ #property strict int СуммаПрогрессии = 100*(1+100)/2; void OnStart() { Alert("Сумма=",1+2+3+4+5+6+7+8+9+10+11+12+13+14+15+16+17+18+19+20+ 21+22+23+24+25+26+27+28+29+30+31+32+33+34+35+36+37+38+39+40+ 41+42+43+44+45+46+47+48+49+50+51+52+53+54+55+56+57+58+59+60+ 61+62+63+64+65+66+67+68+69+70+71+72+73+74+75+76+77+78+79+80+ 81+82+83+84+85+86+87+88+89+90+91+92+93+94+95+96+97+98+99+100); int s=0; for(int i=1; i<=100; i++) { s=s+i; } Alert("s=",s); int t=0; for(int k=1; k<101; k++) t+=k; Alert("t=",t); int y,n; for(y=0, n=1; n<101; y+=n, ++n); Alert("y=",y); Alert("Сумма прогрессии = ",СуммаПрогрессии); Alert("Переставили = ",(1+100)/2*100); }
0 error(s), 0 warning(s), compile time: 105 msec
Вы совершенно правы в том, что транслятор может вычислить константное выражение. Похоже, что транслятор MQL-4 умеет это. Проверил - транслятор скушал глобальную переменную, инициализированную константным выражением
0 error(s), 0 warning(s), compile time: 105 msec
Так вроде об этом давно было известно.
И разработчики в свое время об этом писали.
Ссылку вряд ли найду. 10 лет уж как прошло