| / | Форум |
|
_Temoha_
05.10.2007 15:28
Подскажите пожалуйста как поделить число 1 на 2 чтобы получилось
0,5 В справке по mql ничего не написано |
|
Принцип суперпозиции и интерференции финансовых инструментов Чем больше факторов влияют на поведение валютной пары, тем сложнее оценить ее поведение и сделать прогнозы на будущее. И, следовательно, если бы нам удалось из валютной пары выделить ее составляющие, меняющиеся во времени значения национальной валюты, то тем самым, мы существенно сократили степень свободы движения национальной валюты по сравнению с валютной парой, в которую она входит, и количество факторов влияющих на ее поведение. А как результат, повысили точность оценки ее поведения и прогнозирования будущих значений. Как же нам это сделать? |
|
Vinin
05.10.2007 15:30
double a=1.0; double b=2.0; double c=a/b; Print("c=",c); или 1.0/2.0
|
|
_Temoha_
05.10.2007 15:34
Все дело в том что мне нужно делить на число int n, которое ранее используется для обращения к массиву arr[] и потому не может быть double |
|
Vinin
05.10.2007 15:39
При делении на целое число всегда будет так получаться. Только
деление действительных чисел даст нужный результат.
|
|
Vinin
05.10.2007 15:40
Можно сделать по другому. double a; int b; double c=a/(b*1.0); Так должно работать
|
|
sergei
05.10.2007 18:55
С делением еще туда сюда :) Можно разобраться. а вот что делать с количеством циклов ? Не знаю сталкивался ли еще кто с такой ситуацией ( или на это не обращают внимание- в смысле не проверяют - так ли уж все правильно работает на больших объемах исторических даннаых ? Я вот люблю все пощупать сам.) А ситуация следующая- сделал обычный скрипт - простенький Выводит количество баров в истории - и показывает Дату и Цену Открытия и Закрытия И что получается - Баров в истории к примеру 2391, а выводит данных только по 114. Причем все дело в цикле - for - Не хочет приничать переменная i - которая определенна как счетчик количества циклов значение всего количества баров истории графика. Можете сами убедиться. Максимальное количество циклов удалось сделать 255. И все. О каком тогда иссследовании истории можно говорить? Кто то сам проверял? Так ли действительно правильно работает оператор FOR. И действительно ли мы получаем ту информацию ( надеясь что все правильно работает) которую запрашиваем. Для интересующихся даю скрипт- кто хочет проверит. |
|
Vinin
06.10.2007 02:17
sergei писал (а):
С делением еще туда сюда :) Можно разобраться. а вот что делать с количеством циклов ? Не знаю сталкивался ли еще кто с такой ситуацией ( или на это не обращают внимание- в смысле не проверяют - так ли уж все правильно работает на больших объемах исторических даннаых ? Я вот люблю все пощупать сам.) А ситуация следующая- сделал обычный скрипт - простенький Выводит количество баров в истории - и показывает Дату и Цену Открытия и Закрытия И что получается - Баров в истории к примеру 2391, а выводит данных только по 114. Причем все дело в цикле - for - Не хочет приничать переменная i - которая определенна как счетчик количества циклов значение всего количества баров истории графика. Можете сами убедиться. Максимальное количество циклов удалось сделать 255. И все. О каком тогда иссследовании истории можно говорить? Кто то сам проверял? Так ли действительно правильно работает оператор FOR. И действительно ли мы получаем ту информацию ( надеясь что все правильно работает) которую запрашиваем. Для интересующихся даю скрипт- кто хочет проверит. Попробуй то же самое сделать в советнике. Скрипт на истории не
работает, а только на видимой части. Или поменяй в настройках
количество видимых баров |
|
SK.
06.10.2007 13:10
_Temoha_ писал (а):
Подскажите пожалуйста как поделить число 1 на 2 чтобы получилось
0,5 В справке по mql ничего не написано
2. Если doubl A=1.0 и int B = 2 ,то при вычислении значения выражения А/В используется правило неявного преобразования типов. Тип double имеет более высокий приоритет, поэтому значение выражения, получаемое в результате выполнения операции деления, будет иметь тип double, т.е. будет иметь дробную часть, результат будет 0.5 3. Существует ещё правило явного преобразования типов. Пусть doubl A=1.0 и int B = 2 Если int С = А/В ,то действительное значение 0.5 выражения в правой части от знака равенства должно быть присвоено целой переменной С. При выполнении операции присваивания выполняется приведение типа значения: сначала действительное 0.5 преобразуется в целое 0 (ноль, с отбрасыванием дробной части), а затем 0 присвоится переменной С. Здесь С=0 Если double С = А/В ,то преобразования типов не происходит, т.к. действительное значение 0.5 спокойно присваивается действительной переменной С. Здесь С = 0.5 |
|
SK.
06.10.2007 13:26
Vinin писал (а):
Попробуй то же самое сделать в советнике. Скрипт на истории не
работает, а только на видимой части. Или поменяй в настройках
количество видимых баров
Все операторы работают как положено и в экспертах и в скриптах. Если запустить такой код: int start() { int i, k; // Инициализируем переменную for (i = Bars-1; i >= 0; i--) // Цикл { k++; // Счётчик итераций } Alert ("Значение Bars = ",Bars," Количество итераций = ",k); return; } то (на моей истории) получается такой результат:
|
|
Vinin
06.10.2007 17:05
SK. писал (а):
Vinin писал (а):
Попробуй то же самое сделать в советнике. Скрипт на истории не
работает, а только на видимой части. Или поменяй в настройках
количество видимых баров
Все операторы работают как положено и в экспертах и в скриптах. Если запустить такой код: int start() { int i, k; // Инициализируем переменную for (i = Bars-1; i >= 0; i--) // Цикл { k++; // Счётчик итераций } Alert ("Значение Bars = ",Bars," Количество итераций = ",k); return; } то (на моей истории) получается такой результат: К сожалению скрипт на истории все таки не работает, а только на видимой части.
|
|
Tovaroved
06.10.2007 17:27
_Temoha_ писал (а): Все дело в том что мне нужно делить на число int n, которое ранее используется для обращения к массиву arr[] и потому не может быть double int I(double x) { return(MathRound(x)); } |
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий