Ошибки, баги, вопросы - страница 1525

[Удален]  
Andrey Voytenko:

1. Создаю массив вида:

2. Пытаюсь в коде вызвать список методов через <Ctrl+Space>

Список методов не появляется. Так и должно быть?

Попробую предположить. Если в коде есть другие ошибки, помимо того, что не указан метод/член, то список появляется не всегда.

Попробовал. Нет, ошибочное предположение. Но помогло несколько повторных нажатий комбинации. 

 

Alexey Kozitsyn:

Но помогло несколько повторных нажатий комбинации. 

К сожалению мне ваш рецепт не помогает.
[Удален]  
Andrey Voytenko:
К сожалению мне ваш рецепт не помогает.
Нет, все верно, если в коде есть ошибка, то список открытых членов/методов не появляется. А вот если ошибок нет... тогда беда.
 

1. Простой код:

uint a=50;
int b=-20;
Print(fmax(a,b));

результат: 50

2. Добавляем модификатор input:

input uint a=50;
int b=-20;
Print(fmax(a,b));

результат: 4294967276

Ожидал результата 50. Где я неправ?

 
Andrey Voytenko:

1. Простой код:

результат: 50

2. Добавляем модификатор input:

результат: 4294967276

Ожидал результата 50. Где я неправ?

fmax сравнивает два double числа. Значит будет так:

//+------------------------------------------------------------------+
//|                                                         Test.mq5 |
//|                        Copyright 2016, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.01"
#property script_show_inputs
//---
input uint a=50;
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//uint a=50;
   int b=-20;
   Print("\"uint a=50\" as double:",DoubleToString((double)a,8));
   Print("\"int b=-20\" as double:",DoubleToString((double)b,8));
   Print(DoubleToString(fmax((double)b,(double)a),8));
  }
//+------------------------------------------------------------------+

и результат:

2016.03.03 16:00:24.821 Test (EURUSD,D1)        "uint a=50" as double:50.00000000
2016.03.03 16:00:24.821 Test (EURUSD,D1)        "int b=-20" as double:-20.00000000
2016.03.03 16:00:24.821 Test (EURUSD,D1)        50.00000000
Файлы:
Test.mq5  2 kb
 
Karputov Vladimir:

fmax сравнивает два double числа. Значит будет так:

В языке MQL заявлено и выполняется неявное приведение типов. В частности uint -> double.

Вопрос в том почему оно не работает корректно с input переменными.

 
Andrey Voytenko:

1. Простой код:

результат: 50

2. Добавляем модификатор input:

результат: 4294967276

Ожидал результата 50. Где я неправ?

Вы полный код приведите.

Тут возможны 2 варианта и оба неверные.

1. Код исполняется вне всяких функций.

2. input переменная объявлена внутри функции

 
Slawa:

Вы полный код приведите.

//--- скрипт
input uint a=50;

void OnStart()
  {
   int b=-20;
   Print(fmax(a,b));
  }
 
Andrey Voytenko:

1. Простой код:

результат: 50

2. Добавляем модификатор input:

результат: 4294967276

Ожидал результата 50. Где я неправ?

Спасибо за сообщение.

Ошибка в компиляторе, input здесь никак не влияет на результат.

Ошибка в различии типа выражения  fmax(uint,int), при вычислении на этапе компиляции получается тип int, если вычисление происходит на этапе выполнения - uint

Исправим.
 

  требуется помощь!! Если есть кто добрый человек, то напишите как должен выглядеть код подвального инд. со значениями от 0-100, линией и который делает расчеты исходя из цены другой валютной пары/№ число и полученный результат умножаем на цену той валютной пары на которой стоит индикатор и отнимаем значение полученное (цена другой валютной пары\№ число)...Вот получившуюся разницу и должен отображать индикатор. Все вроде проще некуда, НО черт ногу сломит....((

  помогите, я совсем запутался.