photon сейчас всё сделано на этапе постобработки, в основном цикле никаких дополнительных операций не делается, как Вы правильно догадались - массивы довольно большие, по нескольку тыс. эл., и число их примерно такое же, так что вводить какие либо дополнительные проверки в основной цикл неразумно.
На счёт вспомогательного массива flag я так и не увидел никаких плюсов.
В варианте с массивом flag всё равно придётся обрабатывать 2 массива - сам flag и оригинальный fe типа double.
В моём варианте обрабатывается только один массив double и нет никаких дополнительных сравнений и логических "и", это в любом случае быстрее.
Единственный проигрыш может быть на этапе создания:
char *flag=new char[Len];
будет конечно побыстрее, чем
double *scopy=new double[Len];
memcpy(scopy,fe, Len*sizeof(double));
насколько быстрее - не знаю, но то, что выигрыш в этом, может перевесить выигрыш на этапе обработки - я очень сильно сомневаюсь. Даже по той причине, что с flag нужно будет загружать 2 массива, а с scopy только один, не говоря уже о дополнительных сравнениях.
-- 08.08.2018, 20:35 --причём замечу что отдельный массив флагов я давно предложил и уж точно не double).
Ну это, собственно, и есть развитие Вашего предложения, без него бы ничего и не было. Но я стал использовать ещё дополнительное условие отбора, которое удалось найти после долгих размышлений. Получилось действительно серьёзное ускорение, примерно в 30 раз.
По поводу double я объяснил в предыдущем посте, намой взгляд так будет рациональнее