Вход | Регистрация


1С:Предприятие :: 1С:Предприятие 8 общая

НеРавно или Не Равно

НеРавно или Не Равно
Я
   Мандалай
 
18.07.18 - 18:15
Добрый день.
Озадачился тут вопросом, информации на ИТС не нашел, постю сюда.
Что быстрее будет отрабатывать:
НЕ Х = 0;
ИЛИ 
Х <> 0;
?
 
 
   Aleksey
 
1 - 18.07.18 - 18:16
первое
   Радим1987
 
2 - 18.07.18 - 18:17
   Мандалай
 
3 - 18.07.18 - 18:17
(1)Теоретические выкладки, документация, практика/тесты или мне так кажется?
   Aleksey
 
4 - 18.07.18 - 18:20
(3) тогда второе
   Aleksey
 
5 - 18.07.18 - 18:21
вроде как лет 5 назад на мисте ктото проводил тесты

А в чем проблема накидать цикл на 100500 итераций и сравнить?
   Tonik992
 
6 - 18.07.18 - 18:21
Я считаю, что второе, т.к. в первом случае 2 операции (НЕ и =)
   uno-group
 
7 - 18.07.18 - 18:24
Если х=0 тогда
Иначе
.....
ИМХО быстрее будет
   PR
 
8 - 18.07.18 - 18:30
(0) А какая разница, если делать все-равно нужно вариант 2?
   Мандалай
 
9 - 18.07.18 - 18:36
Я помню кто-то уже поднимал этот вопрос и если мне не изменяет память, то пришли к выводу, что быстрее работает именно первый вариант, но я могу ошибаться.
Поскольку в первом случае первой операцией выполняется операция сравнения на равенство с конкретным значением, а затем полученному значению присваивается отрицание.
А во втором случае выполняется операция сравнения со всем подмножеством вероятных значений. Если подмножество небольшое, то сравнение пройдет быстро, а если вероятных значений много, то на выполнение операции уйдет много ресурсов.
Но в первом случае, насколько я понимаю, выполняется операция присваивания - НЕ, а она насколько я знаю выполняется медленнее, чем операция сравнения.
Поправьте меня, если я в чем-то ошибаюсь.
   Вафель
 
10 - 18.07.18 - 18:38
(9) вроде бы при сравнении 1с не приводт типы. какие тогда множества?
 
 Рекламное место пустует
   lodger
 
11 - 18.07.18 - 18:52
(9) "сравнения со всем подмножеством вероятных значений" - это что за синхрофазатрон в простых булевых операциях?
   Гость из Мариуполя
 
12 - 18.07.18 - 19:40
а давай прикинем, что X изначально имеет значение  true
   Zhuravlik
 
13 - 18.07.18 - 19:48
(8) +1, имхо - так читабельнее. Технически хз.
Но есть ли смысл вообще такие копейки считать? Оптимизировать надо обработку данных - запросы / алгоритмы.
   VladZ
 
14 - 18.07.18 - 20:40
(0) Вариант "НЕ Х = 0" читается хуже. В плане оптимизации скажу так: до таких мелочей стоит докапываться в случае когда весь остальной код идеален по читабельности и быстродействию.
   kittystark
 
15 - 18.07.18 - 21:32
пару-тройку лет назад здесь уже был холивар на эту тему...
   Малыш Джон
 
16 - 18.07.18 - 21:53
насколько я помню, на низком уровне происходит вычитание, но результат никуда не сохраняется, а просто смотрятся значения флагов, и на уровне интерпретатора 1С даже в страшном сне не произойдет мутация в эти ужасы с вариациями и множествами.
Чисто формально, НЕ Х=0 - это две логических операции(вычитание и инверсия), Х<>0 - одна, но... это на полном серьезе обсуждается?? разница в быстродействии этих операций в контексте 1С?
Тогда можно и влияние цвета шрифта, которым код написан, на быстродействие обсудить. Лично я - считаю, что da redz goez fasta!
   vde69
 
17 - 18.07.18 - 21:58
Х<>0

вроде более устойчивая конструкция в плане возможности получить ошибку "нельзя сравнивать типы ...."
   Сияющий в темноте
 
18 - 18.07.18 - 22:46
Начнем с того,что х будет приводиться к числу как в случае равенства,так и не равенства.
Для языков низкого уровня такое сравнение,это операция Test с установкой флага результата,и любой даже немного оптимизирующий компиллятор сьест ваше не и заменит флаги.
нужно,конечно,смотреть скомпиллированный код 1с,но есть подозрение,что и он умееи сьедать не из за чего первая операция может показаться быстрее.
   vi0
 
19 - 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с будет не равно.
   dezss
 
22 - 19.07.18 - 14:07
(18) (21) вот согласен...все зависит от компилятора-интерпретатора...
он вообще 2-ю конструкцию логически может заменить на первую...
   singlych
 
23 - 19.07.18 - 14:12
Помню как-то xmlка правил обмена не читалась, потому что в обработчиках было "<>". 1Ска думала, что это такой тэг...


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Рекламное место пустует