![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
![]()
Сообщение
#441
|
|
![]() Etoslozhnostatus Сообщений: 8 603 Спасибо сказали: 16023 раза ![]() |
Ограничение в 4 миллиарда - естественное ограничение для 32 бит, так что могу и воспользоваться, если будет нужно и если программа достаточно быстра.
А для бОльших чисел нужно использовать 64-битную арифметику или длинные числа. Критикую так потому, что алгоритм мне кажется странным, а комментариев нет. -------------------- - Да ну!?
- Horn of the Argali гну! |
|
|
![]()
Сообщение
#442
|
|
![]() 😸🧡✊✌️ Сообщений: 16 424 Спасибо сказали: 3294 раза ![]() |
Тут мне задали вопрос, действительно ли xorswap работает быстрее, чем использование доп. переменной. Подумав, я понял, что
Цитата Цитата А такая беда только в гамаке или в любом языке? В других языках есть целые переменные. А насчет быстродействия, скажем, для Си:Код int t=x; x=y; y=t; скорее всего, превратится вКод mov EAX,x // а x,y и t что-то навроде [EBP+число] Аmov t,EAX mov EAX,y mov x,EAX mov EAX,t mov y,EAX Код x^=y; y^=x; x^=y; вКод mov EAX,x xor y,EAX mov EAX,y xor x,EAX mov EAX,x xor y,EAX Учитывая, что на современных процессорах и mov, и xor выполняются за 1 такт, разницы никакой, только аж 4 байта памяти экономится. -------------------- Я слежу за тобой!
![]() ![]() Цитата Всегда приятно осознавать, что кто-то делает что-то хуже, чем делал бы ты, если бы умел. Борис "Бонус" Репетур, "От винта!", выпуск 38. |
|
|
![]()
Сообщение
#443
|
|
![]() Etoslozhnostatus Сообщений: 8 603 Спасибо сказали: 16023 раза ![]() |
К предыдущему посту.
Код программы Компиляция Код cl /O2 /FAcs memswap.cpp Код функций в асме Результат Код E:\Projects\2>memswap.exe Time to swap with temporary var is 1328 Time to swap with XOR is 1328 P.S. Сейчас попробую на интеловском оптимизирующем компиляторе попробовать. Код E:\Projects\2>memswap.exe Time to swap with temporary var is 156 Time to swap with XOR is 234 Интеловский компилятор оправдал мои ожидания и обманул меня, переиначив алгоритм. ![]() По сути, результат тот же, но алгоритм другой. -------------------- - Да ну!?
- Horn of the Argali гну! |
|
|
![]()
Сообщение
#444
|
|
![]() 😸🧡✊✌️ Сообщений: 16 424 Спасибо сказали: 3294 раза ![]() |
Оптимизация, конечно, наше всё, но как научить компилятор использовать XCHG?
Код mov eax,x lol?xchg eax,y mov x,eax Или интеловский компилятор его использует? 0_0 -------------------- Я слежу за тобой!
![]() ![]() Цитата Всегда приятно осознавать, что кто-то делает что-то хуже, чем делал бы ты, если бы умел. Борис "Бонус" Репетур, "От винта!", выпуск 38. |
|
|
![]()
Сообщение
#445
|
|
![]() Etoslozhnostatus Сообщений: 8 603 Спасибо сказали: 16023 раза ![]() |
Нет, интеловский компилятор это не использует и вообще рекомендуют
Цитата('Intel Optimization Reference Manual') minimize the use of xchg instructions on memory locations А там, где интеловский компилятор в несколько раз обогнал по быстродействию программ, он просто переиначил двойной цикл for(;i<1000;i++) for(;j<100000;j++) в for(;j<100000;j++) for(;i<1000;i++) что, естественно, быстрее, так как подгружать маленькие блоки памяти можно быстрее. То есть, компилятор оптимизировал работу с памятью и всё, а майкрософтский не додумался до этого. -------------------- - Да ну!?
- Horn of the Argali гну! |
|
|
![]()
Сообщение
#446
|
|
![]() Яблочный произвол! Сообщений: 11 080 Спасибо сказали: 3988 раз ![]() |
Ну да, всего лишь 4 миллиарда прогона цикла в нормальных компиляторах ![]() Код for(uint i=0; i; ++i) это 0 прогонов цикла
|
|
|
![]()
Сообщение
#447
|
|
![]() 😸🧡✊✌️ Сообщений: 16 424 Спасибо сказали: 3294 раза ![]() |
Да и в ненормальных тоже.
Этопростоон явно имел в виду: Код for(uint i=0; ; ++i) ибо для uint i выражение i<0xFFFFFFFE всегда было бы true, если uint 16-битный. -------------------- Я слежу за тобой!
![]() ![]() Цитата Всегда приятно осознавать, что кто-то делает что-то хуже, чем делал бы ты, если бы умел. Борис "Бонус" Репетур, "От винта!", выпуск 38. |
|
|
![]()
Сообщение
#448
|
|
![]() Яблочный произвол! Сообщений: 11 080 Спасибо сказали: 3988 раз ![]() |
где мы, а где 16битные процессоры?
|
|
|
![]()
Сообщение
#449
|
|
![]() 😸🧡✊✌️ Сообщений: 16 424 Спасибо сказали: 3294 раза ![]() |
Хм, я еще и восьмибитные не забыл.
-------------------- Я слежу за тобой!
![]() ![]() Цитата Всегда приятно осознавать, что кто-то делает что-то хуже, чем делал бы ты, если бы умел. Борис "Бонус" Репетур, "От винта!", выпуск 38. |
|
|
![]()
Сообщение
#450
|
|
![]() Etoslozhnostatus Сообщений: 8 603 Спасибо сказали: 16023 раза ![]() |
А я четырёхбитный придумывал
![]() Серьёзно. -------------------- - Да ну!?
- Horn of the Argali гну! |
|
|
![]()
Сообщение
#451
|
|
![]() допустим, мяў Сообщений: 24 091 Спасибо сказали: 13398 раз ![]() |
А чего его придумывать? 4-битный ZX-Spectrum 8080
![]() -------------------- Вокруг столько фильмов, книг, музыки - а природа какая невероятная!
Если тебе скучно жить - ты совсем дурак. (Татьяна Черниговская) |
|
|
![]()
Сообщение
#452
|
|
![]() Etoslozhnostatus Сообщений: 8 603 Спасибо сказали: 16023 раза ![]() |
Во-первых, ZX-Spectrum - 8-битный.
А во-вторых, я придумывал узкоспециализированный процессор для торгового автомата. -------------------- - Да ну!?
- Horn of the Argali гну! |
|
|
![]()
Сообщение
#453
|
|
![]() •●Revolucionario●• Сообщений: 2 467 Спасибо сказали: 5936 раз ![]() |
http://www.red-lang.org/ - внезапно заинтриговало.
Свободный, компилируемый, с синтаксисом а-ля REBOL... -------------------- life MOV.I #life+1, *life
האם יש זמן לעצור ? |
|
|
![]()
Сообщение
#454
|
|
![]() laughed as one fey Сообщений: 12 167 Спасибо сказали: 20602 раза ![]() |
Кто-нибудь с генетическим программированием игрался? Не с алгоритмами, а именно с программированием - выращиванием программы из дерева операторов?
Цитата А я четырёхбитный придумывал Серьёзно. Курсовик какой-то?) |
|
|
![]()
Сообщение
#455
|
|
![]() Etoslozhnostatus Сообщений: 8 603 Спасибо сказали: 16023 раза ![]() |
Курсовик, да.
-------------------- - Да ну!?
- Horn of the Argali гну! |
|
|
![]()
Сообщение
#456
|
|
![]() laughed as one fey Сообщений: 12 167 Спасибо сказали: 20602 раза ![]() |
У нас тоже был..только не с темой, а процессор вообще - пять команд (у меня, впрочем, было примерно 25-30 хD), двуоперандные, однооперандные, безоперандные.
|
|
|
![]()
Сообщение
#457
|
|
![]() laughed as one fey Сообщений: 12 167 Спасибо сказали: 20602 раза ![]() |
Так, вопрос.
Слышал/видел/знает ли кто алгоритм разбиения на треугольники невыпуклого полигона с прорехами внутри? |
|
|
![]()
Сообщение
#458
|
|
![]() 😸🧡✊✌️ Сообщений: 16 424 Спасибо сказали: 3294 раза ![]() |
Это называется "триангуляция".
-------------------- Я слежу за тобой!
![]() ![]() Цитата Всегда приятно осознавать, что кто-то делает что-то хуже, чем делал бы ты, если бы умел. Борис "Бонус" Репетур, "От винта!", выпуск 38. |
|
|
![]()
Сообщение
#459
|
|
![]() laughed as one fey Сообщений: 12 167 Спасибо сказали: 20602 раза ![]() |
Я знаю. Более того, я знаю, что гугл полон ссылок на алгоритмы триангуляции невыпуклых полигонов. Однако насчет прорех я ничего найти не смог - а напрягать остатки геометрического мышления в облом.
|
|
|
![]()
Сообщение
#460
|
|
VCMI developer Сообщений: 377 Спасибо сказали: 690 раз ![]() |
Хмм... Как насчет такого?
http://algolist.manual.ru/maths/geom/polygon/decompose.php Насколько я понял, алгоритм будет работать и с прорехами. Одно но - на выходе будут не треугольники а все те же полигоны, но уже без дыр. Так что полученые полигоны еще нужно будет разбить на треугольники. Ну или можно попробовать триангуляцию Делоне - разбиваем полигон на треугольники, откидываем все те, что оказались снаружи. -------------------- Слава Україні!
|
|
|
![]() ![]() |
Текстовая версия | Сейчас: 14 September 2025 - 10:13 |
Copyright by Алексей Крючков
![]() Programming by Degtyarev Dmitry |
|