Это ошибка терминала?
А так?
datetime _time = mrate_M5[i].time; double _ray = mrate_M5[i].high; double ray = ObjectGetValueByTime(0, ray_name, _time, 0); if(_ray > ray ){ Print("!!!!! mrate_M5[i].high > ray !!!!!!!!!!! ray " + ray + ", цена high=" + _ray + ", время =" + _time); }
Поищите по форуму. 158 раз уже обсуждалось это.
Нельзя в лоб сравнbвать числа double. Можно типа так
double с = a-b; if (c >_Point) Print ("a>b"); else if (c < -_Point) Print ("a<b"); else Print ("a=b");
Поищите по форуму. 158 раз уже обсуждалось это.
Нельзя в лоб сравнbвать числа double. Можно типа так
Ну объясните пожалуйста нам тупым в 159-ый раз почему нельзя сравнить 23506.0 и 23568.0 ?
А лучше сначала вникните в суть вопроса!
Ну объясните пожалуйста нам тупым в 159-ый раз почему нельзя сравнить 23506.0 и 23568.0 ?
А лучше сначала вникните в суть вопроса!
Числа Double - числа с плавающий запятой, пример как это работает:
- вы пишите double a = 1.222, b = 1.222; и думаете, что они равны,
- но на самом деле, там может быть: a = 1.21999999999 и b = 1.222000001 и значение a==b не будет Истиной
- при этом вы можете написать следующий строкой: double c = a и при следующей проверке (a==c) это тоже может не быть истиной
Я сравниваю double так:
- я нормализую оба числа: NormalizeDouble(a, _Digits)
- сравниваю их разность
Как-то один опытный программист (с опытом 20+ лет) сказал мне, что в безотказных крупных системах (конкретно он пишет софт для нефтезаводов) уходят от типа double в пользу int, потому что с int такой ситуации невозможно
Я сравниваю double так:
- я нормализую оба числа: NormalizeDouble(a, _Digits)
- сравниваю их разность
на форуме раньше часто вот такой код писали, я давно сохранил и пользуюсь:
bool CompareDoubles(double number1,double number2) { if(NormalizeDouble(number1-number2,8)==0.0) return(true); else return(false); }
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
double ray = ObjectGetValueByTime(0, ray_name, mrate_M5[i].time, 0);
и вот что выдает
2018.08.18 20:40:12.791 2018.07.11 21:45:00 !!!!! mrate_M5[i].high > ray !!!!!! ray_= 23568.0, цена high=23506.0, время =2018.07.10 16:25:00
// однако цена меньше ray , через раз выдает то правильно , то неправильно
Это ошибка терминала?