в чем разница ?
спасибо
inc(m,..) или m := m + .., в чем разница ? |
1. Заголовок или название темы должно быть информативным !
2. Все тексты фрагментов программ должны помещаться в теги [code] ... [/code] или [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ" и используйте ПОИСК !
4. НЕ используйте форум для личного общения!
5. Самое главное - это раздел теоретический, т.е. никаких задач и программ (за исключением небольших фрагментов) - для этого есть отдельный раздел!
inc(m,..) или m := m + .., в чем разница ? |
renesko1 |
Сообщение
#1
|
поиск Группа: Пользователи Сообщений: 347 Пол: Мужской Реальное имя: nir Репутация: 2 |
в чем разница ?
спасибо -------------------- typedef void Śūnyatā ;
|
Ozzя |
Сообщение
#2
|
Гуру Группа: Пользователи Сообщений: 1 220 Пол: Мужской Репутация: 16 |
Для программирующего на языке Паскаль - никакого, за одним исключением - inc(...), насколько я помню, это борландовское нвовведение. В Паскале Вирта его нет. Соответственно, могут возникнуть нюансы в другой реализации Паскаля.
Лично я страюсь использовать форму i:=i+n |
Bard |
Сообщение
#3
|
Учиться, учиться еще раз учиться Группа: Пользователи Сообщений: 158 Пол: Мужской Реальное имя: Яшар Репутация: 3 |
эта тема мне очень знакома ... когда мы готовились к олимпиаде в нашей команде возник вопрос о разницах этих функций . ну мы долго копались и в конце обнаружили что i:=i+1; работает быстрее чем inc(i); на FP 2.2.0. по моему это главное различие
-------------------- Чтобы поразить цель важна не точность, а смелость
Шарль Луи Монтескё |
andriano |
Сообщение
#4
|
Гуру Группа: Пользователи Сообщений: 1 168 Пол: Мужской Реальное имя: Сергей Андрианов Репутация: 28 |
Самое главное, что inc() - не функция, а инструкция процессора.
Собственно, и в язык она была введена исключительно из-за того, что язык Ассемблера х86 содержит несколько более высокоуровневых инсрукций, чем обычно встречается в ЯВУ. Одна из них inc. И введено она, естественно, из соображения генерации более оптимального кода без лишней нагрузки на оптимизатор компилятора. Кстати, косвенным подтверждением того, что это именно инструкция процессора, является тот факт, что нет ее аналога для чисел с плавающей точкой. |
xds |
Сообщение
#5
|
N337 Группа: Пользователи Сообщений: 737 Пол: Мужской Репутация: 26 |
Inc(m); или m := m + 1; - для современного компилятора сгенерированный код должен быть идентичным.
Цитата Самое главное, что inc() - не функция, а инструкция процессора. Инструкций процессора вне специальных вставок (конструкций asm или inline) нет. "Процедура" Inc - это встроенная языковая конструкция.Цитата ...Язык Ассемблера х86 содержит несколько более высокоуровневых инсрукций, чем обычно встречается в ЯВУ. Каюсь (бью челом): ненал! Сообщение отредактировано: xds - -------------------- The idiots are winning.
|
volvo |
Сообщение
#6
|
Гость |
в конце обнаружили что i:=i+1; работает быстрее чем inc(i); на FP 2.2.0. А теперь - внимание, вопрос... Имеем программу: var i: integer;и ее трансляцию на ассемблер (FPC 2.2.0 - Win32, Options -> Compiler -> Assembler -> List Source, и смотрим s-файл): # [6] inc(i);Как может inc работать медленнее при идентичных кодах? То, что на TP 7 Inc дает прирост в скорости более 20% - было, по-моему тестовые программы до сих пор лежат в FAQ-е. |
xds |
Сообщение
#7
|
N337 Группа: Пользователи Сообщений: 737 Пол: Мужской Репутация: 26 |
Как может inc работать медленнее при идентичных кодах? При оценке невооруженным глазом в командно-олимпиадных условиях - запросто! -------------------- The idiots are winning.
|
renesko1 |
Сообщение
#8
|
поиск Группа: Пользователи Сообщений: 347 Пол: Мужской Реальное имя: nir Репутация: 2 |
спасибо
-------------------- typedef void Śūnyatā ;
|
andriano |
Сообщение
#9
|
Гуру Группа: Пользователи Сообщений: 1 168 Пол: Мужской Реальное имя: Сергей Андрианов Репутация: 28 |
Как может inc работать медленнее при идентичных кодах? В данном конкретном случае "идентичность" кода объясняется опцией компилятора делать проверку на переполнение.В принципе, современный компилятор должен при отключенной проверке оба варианта транслировать в inc mem. Но как ведет себя FPC, не проверял. Борлланд, очевидно, генерировал разный код, из-за чего и была введена псевдофункция inc(). |
Текстовая версия | 4.05.2024 16:29 |