|
0 / 0 / 3
Регистрация: 17.12.2014
Сообщений: 111
|
||||||
Можно ли написать этот код более компактно?03.01.2015, 17:12. Показов 1872. Ответов 26
Метки нет (Все метки)
0
|
||||||
| 03.01.2015, 17:12 | |
|
Ответы с готовыми решениями:
26
Можно ли написать более оптимальный код, используя цикл while? Можно ли написать более оптимальный или простой код, используя цикл for? как можно более просто написать эту программку(более понятным языком для начинающего) |
|
Модератор
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,871
|
|||||||||
| 04.01.2015, 04:52 | |||||||||
![]() ![]() пока не расшифруешь кто такой cast а если с регистрами (х86) то там один регистр разбит на несколько, так скажем подрегистров eax-32 бита ax-16бит ah-8бит al-8бит, так что скорость одинаковая чего не скажешь про ARMно когда попадется огромный цикл, в котором куча ветвлений, то скорость будет очень заметна современные процессоры имеют конвеерную архитектуру скачал из памяти кучу команд и выполняет, параллельно загружает следующие и вот пришло ветвление, а он не угадал ![]() приходится выгружать эту кучу команд и загружать из другой ветки а это время, вот она и потеря производительности
1
|
|||||||||
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|||||||||||||||||||||||||
| 04.01.2015, 05:30 | |||||||||||||||||||||||||
Которое в принципе не логично. Для булей логично &&, или || А вот операция +, да ещё которая на выхлопе дает int - это ни разу не логично, и не очевидно.
С таким же успехом можно сказать, что любой хэлло-ворлд не очевиден, пока не расшифруешь, что делает каждая функция. Даже более того: для читабельности есть смысл бить код на функции просто потому, что понять что делают несколько очень простых кусочков, а затем - что они делают все вместе зачастую намного(!) проще, чем понять, что делает километровая стена монолитного текста. Допустим вот такое выражение:
Но что бы понять, что там будет точно, нужно же проверить условие. То есть я хочу сказать: получается, что сравнение - это же тоже своего рода ветвление. Компилятору жеж придется сгенерировать код, согласно которому значение будет выбрано либо 1, либо 0. От if отличается вероятно простотой конструкции, которая не имеет штрафов для механизма предсказаний. М? Добавлено через 2 минуты Он просто сбрасывает "ненужную ветку", и заново наполняет буфер.
0
|
|||||||||||||||||||||||||
|
Модератор
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,871
|
|||||||||||||||||||
| 04.01.2015, 07:20 | |||||||||||||||||||
|
у булей не может быть сложения посему складываются уже инты сравнение это a==b а ветвление это if(?) т.е если истина то выплняем один код если ложь то другой в ассемблере есть два типа команд cmp сравнивает два регистра и выставляет флаги и допустим jz(переход если выставлен флаг Zero), на самом деле их куча jz,jnz,ja,jb т.е наша конструкция типа
конечно есть модули предсказания, которые предсказывают какую ветку( if/else) грузить, но они бывают ошибаются а процессоры которые имеют два конвеера ( if/else) насколько мне известно еще не появились
0
|
|||||||||||||||||||
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
||||||||
| 04.01.2015, 07:50 | ||||||||
|
Неявное приведение к булю здесь - неожиданно, и не логично. Как в принципе можно узнать, что а равно б, если у вас нет конструкции if ? Мой отец когда то показывал мне математические формулы вида: x = f(a,b), где x будет равен либо а, либо б в зависимости от нужного условия. то есть, можно было сделать так:
Но я точно не помню уже что там за математика такая была. И думаю, что у процессоров есть моральные машинные ифы: условные переходы. Чем они отличаются от обычных ифов - хз.
0
|
||||||||
|
:)
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
|
|||
| 04.01.2015, 12:16 | |||
|
Насчет различий ветвлений исполняемого кода и вычислений ValeryS вроде бы всё подробно объяснил. Но я попробую привести ещё такой пример, чтоб по теме раздела, т.е. на C++: Как известно есть, как минимум, два варианта реализации ассоциативного контейнера. Это std::map и std::unordered_map (в простонародии hash). В первом поиск реализуется через цепочку ветвлений (те самые jz,jnz и пр.) и кол-во сравнений зависит от размера контейнера, а во втором путем вычисления хеш-функции (по сути, линейное выполнение кода), при этом время доступа к элементу не зависит от размера контейнера.
0
|
|||
|
Модератор
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,871
|
||||||||||||||||||||
| 04.01.2015, 12:22 | ||||||||||||||||||||
![]()
и в зависимости от состояния флагов срабатывает переход или нет например jz перход по метке если выставлен флаг Z а флаг Z раньше в результате других операций например cmp команда сравнения,кастрированая sub(вычитание) если операнды равны то в результате вычитания получится 0 , установится флаг Z это так очень упрощено а вот в скобках идет сравнение которое и выдает результат кстати есть такая штучка,как даже не знаю как сказать есть кусок кода который нужно выбросить, ну не так идет или пока не нужен чтобы выпятить проблему можно его закомментировать, можно при помощи препроцессора условную компиляцию, а можно и так
или так
0
|
||||||||||||||||||||
|
:)
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
|
|||||||||||||||||||||
| 04.01.2015, 12:29 | |||||||||||||||||||||
|
По развитию кода и устранению копипасты предлагаю ещё добавить такую функцию:
0
|
|||||||||||||||||||||
| 04.01.2015, 12:29 | |
|
Помогаю со студенческими работами здесь
27
Можно как-то оптимизировать этот код? Как можно перевести этот код с паскаля в с++? Как можно перевести этот код с паскаля в с++? На каком языке этот код и можно ли его переделать? Как этот код написать грамотно? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях.
Задача: при копировании документа очищать определенные реквизиты и табличную. . .
|
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git
main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели
8ATzM_2aurI
|
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2.
Задача: запретить редактирование документа, если он открыт у другого пользователя.
/ / . . .
|
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои.
А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
|
|
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20%
kYBz3eJf3jQ
|
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
|
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
|
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора
Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2.
Задача: уведомлять пользователя, если. . .
|