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

 
Sergey Gridnev #:
Это и был конструктив, вроде бы.

Замените GetMicrosecondCount() на GetTickCount().
Речь вел о том, чтобы не сводить обсуждение к гаданию. Попробуйте на своей машине. У меня ситуация ожидаемо не изменилась после замены.
 
fxsaber #:
мизерное исследование по самому Random.

В среднем MathRand выдает ~центр своего диапазона. Наверное, это правильно.

Нужно было убедиться в равномерности распределения.

void OnStart()
{
  const long Amount = 1e9;
  
  int Array[SHORT_MAX + 1];  
  ArrayInitialize(Array, 0);
  
  for (long i = 0; i < Amount; i++)
    Array[MathRand()]++;
    
  vector Vector;  
  Vector.Assign(Array);
  
#define TOSTRING(A) #A + " = " + (string)(Vector.##A()) + " "  
  Print(TOSTRING(Min) + TOSTRING(ArgMin));
  Print(TOSTRING(Max) + TOSTRING(ArgMax));
  Print(TOSTRING(Median));

  Print(Amount / SHORT_MAX);
}
Min = 29959.0 ArgMin = 11746 
Max = 31059.0 ArgMax = 28130 
Median = 30518.0 
30518

Подтвердилась.

 
fxsaber #:
Речь вел о том, чтобы не сводить обсуждение к гаданию. Попробуйте на своей машине. У меня ситуация ожидаемо не изменилась после замены.
Это очень странно и похоже на баг, т.к. GetTickCount() должен запрашивать значение у опереционки и, соответственно, при каждом запуске возвращать разное значение.
 
Sergey Gridnev #:
Это очень странно и похоже на баг, т.к. GetTickCount() должен запрашивать значение у опереционки и, соответственно, при каждом запуске возвращать разное значение.
Разрешающая способность этой функции столь велика, что будут возвращаться одинаковые значения.
#property tester_no_cache

input int inRange = 0;

double OnTester() { return(GetTickCount()); }

Запускаю в мат. режиме. Один проход значительно короче мин. шага GetTickCount.

 
fxsaber #:
Разрешающая способность этой функции столь велика, что будут возвращаться одинаковые значения.

Запускаю в мат. режиме. Один проход значительно короче мин. шага GetTickCount.

Ну, если это весь код тестируемого советника, то не удивительно.
В этом случае, лично я вижу выход в искусственном замедлении выполнения. Например, в OnInit() получить значение из GetTickCount(), сравнить его с аналогичным в OnTestet(), и если они равны, выполнить Sleep(1).
 
Sergey Gridnev #:
выполнить Sleep(1).
Sleep в Тестере эмулируется и является пустышкой в мат. режиме.