Генератор случайных чисел в заданном диапазоне - страница 2

 
Dmitry Fedoseev:

Дауж.. видел. 

Эти тридцать три этажа кода решаются тремя строками.  Просто убираем из моего кода нормализацию и все.

Да ладно!... ;)

А как в вашем коде какстомный шаг учитывается?

NormalizeDouble()

у меня не используется вообще кстати. Данный код успешно работает и для определения валидного размера лота для торговли. Он универсален. А ваш так... сойдет только для "убедится в наличии хвостов"... :)

 
Andrey Dik:

Да ладно!... ;)

1. А как в вашем коде какстомный шаг учитывается?

2. у меня не используется вообще кстати.

3. Данный код успешно работает и для определения валидного размера лота для торговли. Он универсален. А ваш так... сойдет только для "убедится в наличии хвостов"... :) 

 1. :) Путем деления на шаг, отделения целого и умножения на шаг.

2. В том-то и дело, что не используется, выполняются арифметические действия над даблами, значит на выходе имеем не нормализованный результат. 

3. Он слишком избыточен для универсальности, слишком много всяких проверок. 

Прям ваш код не дает хвостов? Их не видно. Отличный самообман - Print(DoubleToString(m[i],6)); 

И как используется для лота, без нормализации? 

А вы что правда считаете, что NormalizeDouble() должна оставлять хвосты? В чем тогда ее смысл, если ее назначение убирать хвосты?

https://www.mql5.com/ru/docs/convert/normalizedouble - "Округление числа с плавающей точкой до указанной точности." Округляю до двух знаков, но получаю результат не округленный до двух знаков. Какой вывод тут напрашивается? 

Документация по MQL5: Преобразование данных / NormalizeDouble
Документация по MQL5: Преобразование данных / NormalizeDouble
  • www.mql5.com
Преобразование данных / NormalizeDouble - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Dmitry Fedoseev:

1. Прям ваш код не дает хвостов? Их не видно. Отличный самообман - Print(DoubleToString(m[i],6)); 

2. И как используется для лота, без нормализации? 

3. А вы что правда считаете, что NormalizeDouble() должна оставлять хвосты? В чем тогда ее смысл, если ее назначение убирать хвосты?

1. Хвосты бывают. Я и не говорил что их у меня нет никогда.

2. Так и используется.

3. Не должна, я так считаю. Но мало ли как считаю я - во многих вопросах разработчики МТ считают, мягко говоря, по другому. Приходится учитывать специфику, так сказать...

 
/*
   Результат:
   pi= 3.1415926535897931
   NormalizeDouble(pi,3)= 3.1419999999999999
   NormalizeDouble(pi,8)= 3.1415926499999998
   NormalizeDouble(pi,0)= 3.0000000000000000
*/

Вот какой смысл в такой нормализации? Каково место это функции в программировании, зачем она нужна?

Что-то не то с примерчиком.

double pi= 3.1415926535897931;
Print(NormalizeDouble(pi,3)); 
Печатает по человечески 3.142. С DubleToStr то же нормально, если до 16-ти знаков, а вот если 16 знаков, то будет ряд девяток.
 
Dmitry Fedoseev:

1. Интересно было бы без хвостов получить. 

2. Не знаю как сейчас, может быть в функции OrderSend() выполняется нормализация лота, но как-то было время, из-за не нормализованного лота была ошибка открытия ордера.

3. Уже не удивительно.

1. Зачем? Я не гуру-программист, но говорят хвосты неизбежны потому что вещественные числа представлены в памяти как двоичные.

2. Из за ненормализованного лота и сейчас ошибка будет. Но раз работает без ошибок, значит такая "нормализация" прокатывает.

3. Ага. Совсем.

Dmitry Fedoseev:

Вот какой смысл в такой нормализации? Каково место это функции в программировании, зачем она нужна?

вот ещё пример непоняток

 
Andrey Dik:

1. Зачем? Я не гуру-программист, но говорят хвосты неизбежны потому что вещественные числа представлены в памяти как двоичные.

2. Из за ненормализованного лота и сейчас ошибка будет. Но раз работает без ошибок, значит такая "нормализация" прокатывает.

3. Ага. Совсем.

1. Для решения этой проблемы с хвостами и была придумана нормализация.

 
Andrey Dik:

1. Зачем? Я не гуру-программист, но говорят хвосты неизбежны потому что вещественные числа представлены в памяти как двоичные.

2. Из за ненормализованного лота и сейчас ошибка будет. Но раз работает без ошибок, значит такая "нормализация" прокатывает.

3. Ага. Совсем.

вот ещё пример непоняток

2. А вот кажется этого хвоста в числе нет, он только выводится. Сейчас через  7 минут попробую пример показать.
 

Вот:

         MathSrand(1);
         double r=MathRand();
         r=MathRand();
         r=MathRand();
         r=MathRand();
         r/=32768; // имеем случайное число от 0 до 1 (больше или равно 0 и меньше 1).
         r=NormalizeDouble(MathCeil(r*100)/100,2);   
         Alert(r," ",DoubleToStr(r,16));
         if(r==0.81){
            Alert("ok");
         }
         else{
            Alert("no");
         }

Выводится число с хвостом, а проверка  if(r==0.81){ показывает, что хвоста нет.

Пока вывод такой: Все нормально с нормализацией. До какого числа знаков нормализовали, с таким числом знаков и смотреть используя DoubleToString.

 
Dmitry Fedoseev:

Вот:

Выводится число с хвостом, а проверка  if(r==0.81){ показывает, что хвоста нет.

Пока вывод такой: Все нормально с нормализацией. До какого числа знаков нормализовали, с таким числом знаков и смотреть используя DoubleToString.

     

      И вы считаетесь программистом, когда пишете вот это ?    if(r==0.81)

 
Petros Shatakhtsyan:

     

      И вы считаетесь программистом, когда пишете вот это ?    if(r==0.81)

А что в этом не так? 

И вообще, здесь сейчас разговор не от том, кто себя как считает. Если вас мучают проблемы самоидентификации,  обратитесь на какой-нибудь психологический форум.

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