|
0 / 0 / 3
Регистрация: 17.12.2014
Сообщений: 111
|
||||||
Можно ли написать этот код более компактно?03.01.2015, 17:12. Показов 2025. Ответов 26
Метки нет (Все метки)
0
|
||||||
| 03.01.2015, 17:12 | |
|
Ответы с готовыми решениями:
26
Можно ли написать более оптимальный код, используя цикл while? Можно ли написать более оптимальный или простой код, используя цикл for? как можно более просто написать эту программку(более понятным языком для начинающего) |
|
Модератор
8982 / 6749 / 921
Регистрация: 14.02.2011
Сообщений: 23,874
|
|||||||||
| 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
|
|||||||||||||||||||||||||
|
Модератор
8982 / 6749 / 921
Регистрация: 14.02.2011
Сообщений: 23,874
|
|||||||||||||||||||
| 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
|
|||
|
Модератор
8982 / 6749 / 921
Регистрация: 14.02.2011
Сообщений: 23,874
|
||||||||||||||||||||
| 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 | |
|
Можно как-то оптимизировать этот код? Как можно перевести этот код с паскаля в с++? Как можно перевести этот код с паскаля в с++? На каком языке этот код и можно ли его переделать? Как этот код написать грамотно? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
сукцессия 14. Обновленная схема модели
anaschu 28.06.2026
ГЛОБАЛЬНАЯ ОПИСАТЕЛЬНАЯ СПЕЦИФИКАЦИЯ ЭКОСИСТЕМНОЙ МОДЕЛИ «SOIL CHEMISTRY & MYCORRHIZA 2. 0»
https:/ / ibb. co/ NnkGpfMd
Представленная интегрированная схема описывает непрерывную нелинейную. . .
|
сукцессия 13. Питон модель трехзонного мицелия, пока что в основном арбускулярного
anaschu 28.06.2026
## Разработка агентной модели микоризной сукцессии: от выявления артефактов к созданию комплексной системы
### Аннотация
Представлено исследование по разработке агентной модели микоризной. . .
|
сукцессия 12. краткий список проверок модели перед запуском.
anaschu 27.06.2026
Скрытые отказы в моделях систем динамики (SD-models) экологических систем: два случая из практики
Контекст
Разбирался прототип модели систем динамики (SD-модели) микоризной сукцессии: пять. . .
|
Сукцессия 11. Проверка орудий перед войной: разработка через тестирование
anaschu 27.06.2026
Как не дать модели соврать самой себе: проверки для симуляции микоризной сукцессии
Введение
Когда вы строите математическую модель живой системы — грибов, растений, почвы — главная опасность. . .
|
|
10 сукцессия. Питон код войны грибов и растений
anaschu 27.06.2026
import numpy as np
class PlantAgent:
def __init__(self, name, strategy, initial_biomass):
self. name = name
self. strategy = strategy # "greedy" (широколиственные) или. . .
|
сукцессия 9. Математика подлости: как растения предали грибных друзей
anaschu 27.06.2026
Статья 2. Глобальная фосфорная война: эволюционно-экономические механизмы распределения биомов Земли
Введение: Экологический рынок как игра с нулевой суммой
Традиционная экология долгое время. . .
|
сукцессия 8. Как я спорил с ИИ, которые - агенты растений и ненавистники грибов!
anaschu 27.06.2026
Статья 1. Хроники грибного восстания: как Сократов диалог разрушил академические догмы ИИ
Введение: Синдром «цифрового учебника»
Современные большие языковые модели (LLM) обладают колоссальным. . .
|
Главный вопрос моделирования сукцессии
anaschu 27.06.2026
главный вопрос.
Если эктомикориза лучше добывает недоступный фосфор. И ее масса максимальна из всех.
А широколиственный лес тоже имеет самую крутую биомассу.
То почему не возникло их симбиоза? Это. . .
|