- [АРХИВ]Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 5.
- Функция ArrayBsearch
- Пожелания к MQL5
О! я знал, что не первый. Но у меня случай другой. У меня всё отсортировано.
int start()
{
double buf[]={ 1.45, 1.46, 1.47, 1.48, 1.49 };
double val=1.469;
//---- печатаем значения
for(int i=0;i<ArraySize(buf);i++) Print(i," - ",buf[i]);
//---- ищем
int pos=ArrayBsearch(buf,val,ArraySize(buf),0,MODE_ASCEND);
Print("Нашел индекс: ",pos," и его значение в массиве: ",buf[pos]);
//----
return(0);
}
Так вот. Он мне выдает индекс 1. А должен был, если "индекс
ближайшего элемента", выдать индекс 2, то есть третий элемент списка. Потому что 1.469 ближе к 1.47, чем к 1.46. Или я чего то путаю?
Наверно ArrayBSearch() так работает (примерно): while(val<buf[i]){pos=i;i++}
Скорее не баг. Ближайшее может быть по значению, а может по индексу, требуется же отсортированный массив, индекс подразумевается, иначе бы не было нужно массив сортировать, итак бы нашлось ближайшее значение.
Используется стандартная функция bsearch.
При сортировке по возрастанию ищется ближайшее значение снизу.
При сортировке по убыванию ищется ближайшее значение сверху.
Функция задумывалась прежде всего для таймсерии Time[], поэтому такое поведение
Как-то нехорошо stringo на фотографии улыбается. Это явилось причиной для дополнительной проверки.
.
bsearch - в контексте mql есть функция неизвестная.
А в славном языке Си bsearch берет *нестандартную* пользовательскую функцию compare().
Логика которой известна только написавшему эту функцию программисту.
.
Архитектор изволил написать спецификацию функции ArrayBsearch так:
Если элемент с указанным значением в массиве отсутствует, функция вернет индекс ближайшего элемента (по значению).
.
Уважаемый stringo, то, что Вы написали, может быть продуктом исследования Вами актуально существующего кода.
Но заявлять имплементированную логику как должное поведение - некорректно
(Вы фактически говорите: "мы писали на стандартном языке программирования, как работает - так и правильно").
Т.к. логика функции должна соответствовать спецификации, а не сама себе...
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования