Любые вопросы от ПРОФИ к СУПЕРПРОФИ - 1. - страница 17

 
Правильно ли я понимаю, что надо строки сконвертить в целочисленный массив?
 
hrenfx:
Правильно ли я понимаю, что надо строки сконвертить в целочисленный массив?
В Юникод. Целочисленный массив просто для того, чтобы его подставить потом ДЛЛ-ке
 

Это?

#define SIZEOF_INT 4
#define BYTE_BITS 8
#define SIZEOF_ANSI 1
#define SIZEOF_UNICODE 2

void StringToINT( string Str, int& Buffer[], bool UniCode = FALSE )
{
  int Koef;
  
  if (UniCode)
    Koef = SIZEOF_UNICODE;
  else
    Koef = SIZEOF_ANSI;
    
  int i = 0, j, Len = StringLen(Str);
  int Pos = 0, Size =  Koef * Len / SIZEOF_INT;
    
  if ((Koef * Len) % SIZEOF_INT > 0)
    Size++;
    
  ArrayResize(Buffer, Size);
    
  while (i < Len)
  {
    Buffer[Pos] = 0;
    
    for (j = 0; j < SIZEOF_INT / Koef; j++)
    {
      if (i < Len)
        Buffer[Pos] |= StringGetChar(Str, i) << (Koef * j * BYTE_BITS);
        
      i++;
    }
    
    Pos++;
  }
  
  return;
}

string INTToString( int& Buffer[], bool UniCode = FALSE )
{
  string Str = "";
  int Tmp, Size = ArraySize(Buffer);
  int Koef;
  
  if (UniCode)
    Koef = SIZEOF_UNICODE;
  else
    Koef = SIZEOF_ANSI;
  
  for (int i = 0; i < Size; i++)
  {
    Tmp = Buffer[i];
    
    while (Tmp != 0)
    {
      Str = Str + CharToStr(Tmp & 0xFF);
      
      Tmp >>= Koef * BYTE_BITS;
    }
  }  
  
  return(Str);
}

void start()
{
  int Buffer[];
  string Str = "abcde";
  
  StringToINT(Str, Buffer, FALSE); // ANSI
  Str = INTToString(Buffer, FALSE); // ANSI
  Print(ArraySize(Buffer));

  Print(Str);

  StringToINT(Str, Buffer, TRUE); // UNICODE
  Str = INTToString(Buffer, TRUE); // UNICODE  

  Print(ArraySize(Buffer));
  Print(Str);
  
  return;
} 
 

Всем спасибо за помощь и участие.

на 15 странице - Zhunko и TheXpert уже направили меня на путь и я таки все сделал почти правильно :)


но по неопытности завтыкал и отправил функцию MultiByteToWideChar вместо CP_ACP аж на CP_UTF8

слава Всевышнему, что появился Ilnur и поправил мой код, иначе уже хотел крест ставить на этой либе в МТ4


Еще раз спасибо всем за решение, вместе мы банда! :)

 
Файлы:
 

Я разрабатываю индикатор, который включает в себя колокол нормального распределения. Соответственно вот задача, которую требуется решить.

Для оценки статистической значимости полученных результатов требуется найти величину стандартного отклонения случайного процесса в момент испытания N. Математическое ожидание при этом заранее известно и равно нулю, а вероятность положительного исхода (+1) каждого испытания равна вероятности отрицательного (-1) и соответственно равна 0.5.

Пример 1. Два игрока будут играть в орлянку пока не совершат 1000 бросков монеты. Определить границы диапазона, в котором будут находится выигрыш одного из них и соответственно проигрыш другого с вероятностью 99,7%.

Т.е. всего навсего нужна формула кривой этой самой сигмы. Знаю, задача стара как мир и я сам умею высчитывать эти отклонения на основе имеющейся последовательности (МНК), но мне нужно высчитать ее саму по себе, без самих BP.

 
C-4:

Я разрабатываю индикатор, который включает в себя колокол нормального распределения. Соответственно вот задача, которую требуется решить.

Для оценки статистической значимости полученных результатов требуется найти величину стандартного отклонения случайного процесса в момент испытания N. Математическое ожидание при этом заранее известно и равно нулю, а вероятность положительного исхода (+1) каждого испытания равна вероятности отрицательного (-1) и соответственно равна 0.5.

Пример 1. Два игрока будут играть в орлянку пока не совершат 1000 бросков монеты. Определить границы диапазона, в котором будут находится выигрыш одного из них и соответственно проигрыш другого с вероятностью 99,7%.

Т.е. всего навсего нужна формула кривой этой самой сигмы. Знаю, задача стара как мир и я сам умею высчитывать эти отклонения на основе имеющейся последовательности (МНК), но мне нужно высчитать ее саму по себе, без самих BP.

C-4,

Для биномиального распределения, которое в данном случае имеет место (и которое при большом N хорошо аппроксимируется нормальным) среднеквадратическое отклонение (сигма) равно sqrt(N*p*q), где N - количество испытаний, p - вероятность единичного выигрыша, q = 1-p - вероятность единичного проигрыша.

корень добавил)))

 

Т.е. sqrt(1000*0.5*0.5) = sqrt(250) = 15,81

Соответственно, 99.7% укладываются в плюс-минус три сигмы 3*15.81 = 47.434

 
Вообще, чтобы определить приближенно любой квантиль биномиальной схемы, можно воспользоваться интегральной теоремой Муавра-Лапласа (гугл). Значения функции Ф(х) хорошо табулированы, есть и алгоритмы, выполняющие численное интегрирование. Задача стандартная, поэтому решена уже миллион раз)
 
alsu:

Т.е. sqrt(1000*0.5*0.5) = sqrt(250) = 15,81

Соответственно, 99.7% укладываются в плюс-минус три сигмы 3*15.81 = 47.434


Спасибо за совет. Но почему-то функция вырисовывается узковатая:

Использовалось 500 СБ и как-то непохоже что 99.7% из них укладываются в три сигмы.

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