Double vs FLOAT - непонятная ошибка MathFloor - страница 5

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

да ну понятное дело что нормализация нужна. кто ж говорит что я ее не делал :-)

 

и конечно же данные получались с хвостом, из-за этого Mathfloor срабатывал "не туда" куда нужно.  

 
Vladislav Andruschenko:

да ну понятное дело что нормализация нужна. кто ж говорит что я ее не делал :-)

 

и конечно же данные получались с хвостом, из-за этого Mathfloor срабатывал "не туда" куда нужно.  

у вас в коде нет нормализации перед округлением)

везде есть, но в конце вы округляете число ненормализированное

 
Taras Slobodyanik:

у вас в коде нет нормализации перед округлением)

везде есть, но в конце вы округляете число ненормализированное

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

 
Vladislav Andruschenko:

да ну понятное дело что нормализация нужна.

Нормализация - дорогая операция и для этой задачи же NormalizeDouble и MathFloor не нужны совсем.
 
fxsaber:
Нормализация - дорогая операция и для этой задачи же NormalizeDouble и MathFloor не нужны совсем.

нужны, и я думаю, что нужно добавить в Справочник рекомендацию к операциям MathFloor и MathCeil - "рекомендуем нормализировать значения перед выполнением округления"

пс. сам как-то наткнулся на эту особенность. 

 
Taras Slobodyanik:

нужны, и я думаю, что нужно добавить в Справочник рекомендацию к операциям MathFloor и MathCeil - "рекомендуем нормализировать значения перед выполнением округления"

пс. сам как-то наткнулся на эту особенность. 

то что нужно нормализовать все значения это я наткнулся очень давно, и это и понятно.

но даже нормализация не дает того результата которого ожидаешь.  

 
Тогда почему это работает без нормализации и MathFloor?

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

Double vs FLOAT - непонятная ошибка MathFloor

fxsaber, 2017.02.26 08:53

#define ALPHA 0.1

int DoubleToInt( const double Num )
{
  return((int)(Num + ALPHA));
}

void OnStart()
{
  double NewPrice = DoubleToInt((Ask + Bid) / (2 * Point)) * Point;

  Print(NewPrice);
}
 
fxsaber:
Тогда почему это работает без нормализации и MathFloor?
Оно отвечает требованиям что если спред нечетный то цена должна быть ближе к бид?
Ведь MathFloor я использовал именно для этого. 
 
Vladislav Andruschenko:
Оно отвечает требованиям что если спред нечетный то цена должна быть ближе к бид?
Да.