Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Думаю, быстрее сравнений будет.
int init() { int rng = 100000000; int i; datetime T0,T1,T2,T3,T4; int y = 1; T0 = LocalTime(); for (i=-rng;i<rng;i++) { y = (1 - 2*(i^y)>>31); } T1 = LocalTime(); for (i=-rng;i<rng;i++) { if(i<0) y=-1; else y=1; } T2 = LocalTime(); for (i=-rng;i<rng;i++) { if(((i^y)>>31)) y=-y; } T3 = LocalTime(); for (i=-rng;i<0;i++) { y = i / MathAbs(i); } for (i=1;i<rng;i++) { y = i / MathAbs(i); } T4 = LocalTime(); Print("Вариант 1: ",T1-T0,"с ","Вариант 2: ",T2-T1,"с ","Вариант 3: ",T3-T2,"с ","Вариант 4: ",T4-T3,"с "); return(0); }Вот лог:
P.S. Для сохранения модуля y преимущество у варианта 1
а мой вариант проверить? :)
зато гораздо лаконичнее :p
где inline-подстановки обсуждали???
Ещё тест, часть старые, часть про MathAbs.
Код:
int init() { int rng = 100000000; int i; datetime T0,T1,T2,T3,T4,T5,T6,T7,T8; int y = 1; int absY; T0 = LocalTime(); for (i=-rng;i<rng;i++) { // y = y*(1 - 2*(i^y)>>31); y = (i>0)*2-1; } T1 = LocalTime(); for (i=-rng;i<rng;i++) { y = 1 - 2*(i>>31); } T2 = LocalTime(); for (i=-rng;i<rng;i++) { // if(((i^y)>>31)) y=-y; if(i<0) y=-1; else y=1; } T3 = LocalTime(); for (i=-rng;i<rng;i++) { y = MathAbs(i); } T4 = LocalTime(); for (i=-rng;i<rng;i++) { y = y*(1-2*(y>>31)); } T5 = LocalTime(); for (i=-rng;i<rng;i++) { y = y*(2*(y>0)-1); } T6 = LocalTime(); for (i=-rng;i<rng;i++) { if(y<0) absY=-y; else absY=y; } T7 = LocalTime(); for (i=-rng;i<rng;i++) { } T8 = LocalTime(); Print("Исходный вариант: ",T1-T0,"с"); Print("Вариант со сдвигом: ",T2-T1,"с"); Print("Лобовая if-else: ",T3-T2,"с"); Print("MathAbs: ",T4-T3,"с"); Print("Эквивалент MathAbs, вариант 1: ",T5-T4,"с"); Print("Эквивалент MathAbs, вариант 2: ",T6-T5,"с"); Print("Эквивалент MathAbs, вариант 3: ",T7-T6,"с"); Print("Пустой цикл: ",T8-T7,"с"); return(0); }Результат: