Новая версия платформы MetaTrader 5 build 3260: Массовые операции, функции матриц и векторов и улучшения в чате - страница 4

 
fxsaber #:

Смело использую лаконичную запись при работе с целыми. Проблем не возникает.

я где то уже обжигался на такой лаконичной записи, точно помню, что спрашивал тут где косяк, кто то подсказал, имхо это не правильно

void OnStart()
{
   #define AMOUNT_22 22e7
   Print(typename(AMOUNT_22));   //     double
}
 
Igor Makanu #:

я где то уже обжигался на такой лаконичной записи, точно помню, что спрашивал тут где косяк, кто то подсказал, имхо это не правильно

void OnStart()
{
  int a[];
  double d = 1e5;
  
  ArrayResize(a, 1e5);
  ArrayResize(a, d); // possible loss of data due to type conversion
}
 
Maxim Kuznetsov #:

а сколько реально объективно записалось ?

в строчке могут быть ошибки Print, и приведения типов (ulong делим на int и приводим к строке).

Нет, ошибка именно в FileWriteArray - она неправильно определяет записываемый объем данных:

int size1 = 20;
int size2 = 220000000;
ulong size = size1*size2;
Print(size/20); //Результат:                 5251635

кто так пишет?

Более того, строгий компилятор выдал бы предупреждение, поскольку результат (ulong) изначально предполагает возможность переполнения в результате вычислений
 
FileWriteArray() fails to write arrays whose raw size is above UINT_MAX (2^32 bytes).

Файлы:
code.mq5  3 kb
 
amrali #:
FileWriteArray() fails to write arrays whose raw size is above UINT_MAX (2^32 bytes).

INT_MAX

 
Aliaksandr Hryshyn #:

INT_MAX

Отсюда следует, что при INT_MAX < 210000000*20 < UINT_MAX :

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

  #define AMOUNT 22e7 // Если заменить на 21e7, то ошибка не возникает.
 

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Новая версия платформы MetaTrader 5 build 3091: Улучшения в работе

traveller00, 2021.12.04 15:10

Есть простой скрипт

void OnStart()
{
  ushort Item,Array[];
  Print(sizeof(Item));
  Print(sizeof(Array[0]));
}

Будучи собранный старой релизной версией 2940 он выдаёт результат 2 2, как и ожидается.

Будучи собранный последней релизной версией 3091 он выдаёт результат 2 4.

Почему?

На последней релизной 3260 баг на месте.

Баг тянется уже почти пол года. Его так сложно поправить или в чём может быть дело? Что я могу сделать со своей стороны? Спасибо.

 
fxsaber #:

b3260, NTFS. Ошибка FileWriteArray.


Строка для поискаOshibka 039.

К сожалению, при портировании 32 битного кода в 64 битный допустили ошибку, исправим.

У меня вопрос, точно есть необходимость писать over 4GB данных в файл одним вызовом ?
 
traveller00 #:

На последней релизной 3260 баг на месте.

Баг тянется уже почти пол года. Его так сложно поправить или в чём может быть дело? Что я могу сделать со своей стороны? Спасибо.

Спасибо за сообщение. Исправлено.

 
Vladimir Belozercev #:

MetaTrader 5 build 3245. Отладка. Не работает трассировка переменных (много версий подряд).

Локально объявленные переменные внутри метода класса видны, а сами члены класса - нет.

Присоединяюсь к просьбе.  На отладке невозможно просмотреть все переменные, которые должны быть видны программе (как правило, члены класса).  

Причина обращения: