Языки программирования |
Здравствуйте, гость ( Вход | Регистрация )
Языки программирования |
31 May 2011, 20:00
Сообщение
#441
|
|
Etoprostostatus Сообщений: 8 527 Спасибо сказали: 15833 раза |
Ограничение в 4 миллиарда - естественное ограничение для 32 бит, так что могу и воспользоваться, если будет нужно и если программа достаточно быстра.
А для бОльших чисел нужно использовать 64-битную арифметику или длинные числа. Критикую так потому, что алгоритм мне кажется странным, а комментариев нет. -------------------- Etoprostopodpis'
|
|
|
09 Jun 2011, 10:09
(Сообщение отредактировал tolich - 09 Jun 2011, 10:10)
Сообщение
#442
|
|
😸🧡✊✌️ Сообщений: 16 024 Спасибо сказали: 2664 раза |
Тут мне задали вопрос, действительно ли 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 байта памяти экономится. -------------------- |
|
|
09 Jun 2011, 11:35
Сообщение
#443
|
|
Etoprostostatus Сообщений: 8 527 Спасибо сказали: 15833 раза |
К предыдущему посту.
Код программы Компиляция Код 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 Интеловский компилятор оправдал мои ожидания и обманул меня, переиначив алгоритм. По сути, результат тот же, но алгоритм другой. -------------------- Etoprostopodpis'
|
|
|
09 Jun 2011, 11:50
Сообщение
#444
|
|
😸🧡✊✌️ Сообщений: 16 024 Спасибо сказали: 2664 раза |
Оптимизация, конечно, наше всё, но как научить компилятор использовать XCHG?
Код mov eax,x lol?xchg eax,y mov x,eax Или интеловский компилятор его использует? 0_0 -------------------- |
|
|
09 Jun 2011, 12:48
Сообщение
#445
|
|
Etoprostostatus Сообщений: 8 527 Спасибо сказали: 15833 раза |
Нет, интеловский компилятор это не использует и вообще рекомендуют
Цитата('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++) что, естественно, быстрее, так как подгружать маленькие блоки памяти можно быстрее. То есть, компилятор оптимизировал работу с памятью и всё, а майкрософтский не додумался до этого. -------------------- Etoprostopodpis'
|
|
|
12 Jun 2011, 19:08
Сообщение
#446
|
|
Яблочный произвол! Сообщений: 11 080 Спасибо сказали: 3988 раз |
Ну да, всего лишь 4 миллиарда прогона цикла в нормальных компиляторах Код for(uint i=0; i; ++i) это 0 прогонов цикла
|
|
|
12 Jun 2011, 19:17
(Сообщение отредактировал tolich - 12 Jun 2011, 19:18)
Сообщение
#447
|
|
😸🧡✊✌️ Сообщений: 16 024 Спасибо сказали: 2664 раза |
Да и в ненормальных тоже.
Этопростоон явно имел в виду: Код for(uint i=0; ; ++i) ибо для uint i выражение i<0xFFFFFFFE всегда было бы true, если uint 16-битный. -------------------- |
|
|
12 Jun 2011, 21:37
Сообщение
#448
|
|
Яблочный произвол! Сообщений: 11 080 Спасибо сказали: 3988 раз |
где мы, а где 16битные процессоры?
|
|
|
12 Jun 2011, 23:22
Сообщение
#449
|
|
😸🧡✊✌️ Сообщений: 16 024 Спасибо сказали: 2664 раза |
Хм, я еще и восьмибитные не забыл.
-------------------- |
|
|
12 Jun 2011, 23:24
Сообщение
#450
|
|
Etoprostostatus Сообщений: 8 527 Спасибо сказали: 15833 раза |
А я четырёхбитный придумывал
Серьёзно. -------------------- Etoprostopodpis'
|
|
|
13 Jun 2011, 00:24
Сообщение
#451
|
|
пират с чёрной меткой Сообщений: 23 634 Спасибо сказали: 12913 раза |
А чего его придумывать? 4-битный ZX-Spectrum 8080 Прямой предок IBM AT 8086
-------------------- Давший быка на убой не выпросил и печень на жаркое.
|
|
|
13 Jun 2011, 07:37
Сообщение
#452
|
|
Etoprostostatus Сообщений: 8 527 Спасибо сказали: 15833 раза |
Во-первых, ZX-Spectrum - 8-битный.
А во-вторых, я придумывал узкоспециализированный процессор для торгового автомата. -------------------- Etoprostopodpis'
|
|
|
14 Aug 2011, 11:48
Сообщение
#453
|
|
•●Revolucionario●• Сообщений: 2 467 Спасибо сказали: 5934 раза |
http://www.red-lang.org/ - внезапно заинтриговало.
Свободный, компилируемый, с синтаксисом а-ля REBOL... -------------------- life MOV.I #life+1, *life
האם יש זמן לעצור ? |
|
|
29 Mar 2012, 10:41
Сообщение
#454
|
|
laughed as one fey Сообщений: 12 166 Спасибо сказали: 20585 раз |
Кто-нибудь с генетическим программированием игрался? Не с алгоритмами, а именно с программированием - выращиванием программы из дерева операторов?
Цитата А я четырёхбитный придумывал Серьёзно. Курсовик какой-то?) |
|
|
29 Mar 2012, 11:01
Сообщение
#455
|
|
Etoprostostatus Сообщений: 8 527 Спасибо сказали: 15833 раза |
Курсовик, да.
-------------------- Etoprostopodpis'
|
|
|
29 Mar 2012, 11:12
Сообщение
#456
|
|
laughed as one fey Сообщений: 12 166 Спасибо сказали: 20585 раз |
У нас тоже был..только не с темой, а процессор вообще - пять команд (у меня, впрочем, было примерно 25-30 хD), двуоперандные, однооперандные, безоперандные.
|
|
|
18 May 2012, 21:22
Сообщение
#457
|
|
laughed as one fey Сообщений: 12 166 Спасибо сказали: 20585 раз |
Так, вопрос.
Слышал/видел/знает ли кто алгоритм разбиения на треугольники невыпуклого полигона с прорехами внутри? |
|
|
18 May 2012, 21:27
Сообщение
#458
|
|
😸🧡✊✌️ Сообщений: 16 024 Спасибо сказали: 2664 раза |
Это называется "триангуляция".
-------------------- |
|
|
18 May 2012, 21:31
(Сообщение отредактировал feanor - 18 May 2012, 21:34)
Сообщение
#459
|
|
laughed as one fey Сообщений: 12 166 Спасибо сказали: 20585 раз |
Я знаю. Более того, я знаю, что гугл полон ссылок на алгоритмы триангуляции невыпуклых полигонов. Однако насчет прорех я ничего найти не смог - а напрягать остатки геометрического мышления в облом.
|
|
|
18 May 2012, 22:32
Сообщение
#460
|
|
VCMI developer Сообщений: 377 Спасибо сказали: 690 раз |
Хмм... Как насчет такого?
http://algolist.manual.ru/maths/geom/polygon/decompose.php Насколько я понял, алгоритм будет работать и с прорехами. Одно но - на выходе будут не треугольники а все те же полигоны, но уже без дыр. Так что полученые полигоны еще нужно будет разбить на треугольники. Ну или можно попробовать триангуляцию Делоне - разбиваем полигон на треугольники, откидываем все те, что оказались снаружи. -------------------- Слава Україні!
|
|
|
Текстовая версия | Сейчас: 20 April 2024 - 16:06 |
Copyright by Алексей Крючков
Programming by Degtyarev Dmitry |