|
НеРавно или Не Равно | ☑ | ||
---|---|---|---|---|
0
Мандалай
18.07.18
✎
18:15
|
Добрый день.
Озадачился тут вопросом, информации на ИТС не нашел, постю сюда. Что быстрее будет отрабатывать: НЕ Х = 0; ИЛИ Х <> 0; ? |
|||
1
Aleksey
18.07.18
✎
18:16
|
первое
|
|||
2
Радим1987
18.07.18
✎
18:17
|
||||
3
Мандалай
18.07.18
✎
18:17
|
(1)Теоретические выкладки, документация, практика/тесты или мне так кажется?
|
|||
4
Aleksey
18.07.18
✎
18:20
|
(3) тогда второе
|
|||
5
Aleksey
18.07.18
✎
18:21
|
вроде как лет 5 назад на мисте ктото проводил тесты
А в чем проблема накидать цикл на 100500 итераций и сравнить? |
|||
6
Tonik992
18.07.18
✎
18:21
|
Я считаю, что второе, т.к. в первом случае 2 операции (НЕ и =)
|
|||
7
uno-group
18.07.18
✎
18:24
|
Если х=0 тогда
Иначе ..... ИМХО быстрее будет |
|||
8
PR
18.07.18
✎
18:30
|
(0) А какая разница, если делать все-равно нужно вариант 2?
|
|||
9
Мандалай
18.07.18
✎
18:36
|
Я помню кто-то уже поднимал этот вопрос и если мне не изменяет память, то пришли к выводу, что быстрее работает именно первый вариант, но я могу ошибаться.
Поскольку в первом случае первой операцией выполняется операция сравнения на равенство с конкретным значением, а затем полученному значению присваивается отрицание. А во втором случае выполняется операция сравнения со всем подмножеством вероятных значений. Если подмножество небольшое, то сравнение пройдет быстро, а если вероятных значений много, то на выполнение операции уйдет много ресурсов. Но в первом случае, насколько я понимаю, выполняется операция присваивания - НЕ, а она насколько я знаю выполняется медленнее, чем операция сравнения. Поправьте меня, если я в чем-то ошибаюсь. |
|||
10
Вафель
18.07.18
✎
18:38
|
(9) вроде бы при сравнении 1с не приводт типы. какие тогда множества?
|
|||
11
lodger
18.07.18
✎
18:52
|
(9) "сравнения со всем подмножеством вероятных значений" - это что за синхрофазатрон в простых булевых операциях?
|
|||
12
Гость из Мариуполя
гуру
18.07.18
✎
19:40
|
а давай прикинем, что X изначально имеет значение true
|
|||
13
Zhuravlik
18.07.18
✎
19:48
|
(8) +1, имхо - так читабельнее. Технически хз.
Но есть ли смысл вообще такие копейки считать? Оптимизировать надо обработку данных - запросы / алгоритмы. |
|||
14
VladZ
18.07.18
✎
20:40
|
(0) Вариант "НЕ Х = 0" читается хуже. В плане оптимизации скажу так: до таких мелочей стоит докапываться в случае когда весь остальной код идеален по читабельности и быстродействию.
|
|||
15
kittystark
18.07.18
✎
21:32
|
пару-тройку лет назад здесь уже был холивар на эту тему...
|
|||
16
Малыш Джон
18.07.18
✎
21:53
|
насколько я помню, на низком уровне происходит вычитание, но результат никуда не сохраняется, а просто смотрятся значения флагов, и на уровне интерпретатора 1С даже в страшном сне не произойдет мутация в эти ужасы с вариациями и множествами.
Чисто формально, НЕ Х=0 - это две логических операции(вычитание и инверсия), Х<>0 - одна, но... это на полном серьезе обсуждается?? разница в быстродействии этих операций в контексте 1С? Тогда можно и влияние цвета шрифта, которым код написан, на быстродействие обсудить. Лично я - считаю, что da redz goez fasta! |
|||
17
vde69
18.07.18
✎
21:58
|
Х<>0
вроде более устойчивая конструкция в плане возможности получить ошибку "нельзя сравнивать типы ...." |
|||
18
Сияющий в темноте
18.07.18
✎
22:46
|
Начнем с того,что х будет приводиться к числу как в случае равенства,так и не равенства.
Для языков низкого уровня такое сравнение,это операция Test с установкой флага результата,и любой даже немного оптимизирующий компиллятор сьест ваше не и заменит флаги. нужно,конечно,смотреть скомпиллированный код 1с,но есть подозрение,что и он умееи сьедать не из за чего первая операция может показаться быстрее. |
|||
19
vi0
19.07.18
✎
03:59
|
(0) Х <> 0 - это проще воспринимается, особенно с реальной длинной имен переменных, пока дойдешь до знака сравнения, уже забудешь что в начале НЕ стоит
|
|||
20
Мандалай
19.07.18
✎
09:01
|
Я привел Х к числу для примера.
Меня в принципе интересует скорость выполнения = и <> с любыми типами значений. Кстати вот в запросах и в алгоритмическом языке разница все таки имеется. Ведь по сути в языке запросов исполнение в клиент серверном варианте передается на сервер, а следовательно операцию исполняет SQL. Что там происходит это видимо уже другая история. (12)Я так понимаю, Вы клоните к тому, что Х может быть в принципе другого типа? А тут совсем другое что-то произойдет? Тесты кстати показали, что <> работает быстрее на 5-10 %. Тесты проводились в клиент серверной базе (14)Соглашусь, но готов пожертвовать удобством в пользу скорости. (16)Крутые пацаны даже моник протирают перед запуском отчета. (18)Это что-то сильно умное. Можно сцылку для рожденного 1сом. |
|||
21
Сияющий в темноте
19.07.18
✎
13:59
|
И вообще,ключевое,это сравнение именно с нулем,т.к.во первых,один операнд сравнения задан,а во вторых,он имеет очень специальнон значение.
на языке ассемблера для значения,находящегося в регисте аккумулятора обычно есть флаг z,который ставится в единицу,пока число ноль. просто,в языках высокого уровня обычно переменные в регистр не помещаются,тае как есть в переменной хранится тип значения и само значение. строгое сравнение сначала проверяет тип,а потом проверяет значение,но в строгом сравнении число 1 целое не равно числу 1 дробному,поэтому,его не используют обычное сравнение сравнивает типы значений,если типы совпадают,то сравниваются значения,если типы не совпадают,то система проверяет таблицу приведения типов,чтобы понять,какой из типов можно привести к другому или оба типа к третьему,после приведения уже выполняется сравнение значений.если приведение типов невозможно,то получается не равно. в разных языках программирования по разному решаются ситуации,когда строка,содержащая число,сравнивается с числом,но в 1с будет не равно. |
|||
22
dezss
19.07.18
✎
14:07
|
(18) (21) вот согласен...все зависит от компилятора-интерпретатора...
он вообще 2-ю конструкцию логически может заменить на первую... |
|||
23
singlych
19.07.18
✎
14:12
|
Помню как-то xmlка правил обмена не читалась, потому что в обработчиках было "<>". 1Ска думала, что это такой тэг...
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |