| Микроконтролери и електроника http://mcu-bg.com/mcu_site/ |
|
| кви са ви наблюденията за оптимизацията в С компилаторите? http://mcu-bg.com/mcu_site/viewtopic.php?f=3&t=3734 |
Страница 1 от 1 |
| Автор: | zaphod [ Съб Фев 17, 2007 1:49 pm ] |
| Заглавие: | кви са ви наблюденията за оптимизацията в С компилаторите? |
гледам сега кода който ми е изгенерирал С30, доста е зле. свикнал съм с микрософтския компилер, дето съм се отказал да пробвам да го бия на асемблер, обаче тоя С30 е далеч от класата му. п.с. микрософтсия само един път съм го виждал да се излага - код от типа на f*f*f*f*f*f*f*f го прави буквално, със 7 умножения, а има много по-бърз начин. |
|
| Автор: | ДедоБоре [ Съб Фев 17, 2007 10:51 pm ] |
| Заглавие: | |
ако ти трябва наистина оптимизиран или малък код - пиши си на асемблер на мен понякога ми се е налагало да вадя отделни процедури в отделни файлове и да ги компилирам с различни флагове за оптимизация. рядко. ама да пишеш f*f*f*f*f*f*f или i+++++++++++++++++ е проява на изключителен стил апропо, как го виждаш онова с многото умножения освен с много умножения (особено ако приемем, че f значи 'float')? |
|
| Автор: | zaphod [ Съб Фев 17, 2007 11:58 pm ] | |||||||||
| Заглавие: | ||||||||||
вдигането на 8ма го виждам с три умножения, вместо 7 и не разбирам какво му е на стила? като ти трябва нещо си на 8ма, ше умножаваш, де ше идеш. може да ползваш функция за степен, но тя е изключително бавна. дори exp(a*log(b)) бачка по-бързо, интересно защо. вероятно защото функцията за степен прави разни досадни проверки, от рода на дали ако основата е отрицателна число, е цяло, та да знае да дава ли грешка или да смята. |
||||||||||
| Автор: | Ки4о [ Нед Фев 18, 2007 12:10 am ] |
| Заглавие: | |
Доколкото си спомням математиката exp(а*log(b))=exp(log(b)^a) |
|
| Автор: | zaphod [ Нед Фев 18, 2007 12:31 am ] |
| Заглавие: | |
изравняват се някъде при а около 100 и то при положение че умножаваш толкова пъти, колкото и степента. на практика можеш да минеш със логаритмична сложност (умножения на брой лог(а)), тогава няма да се изравнят никога, понеже ще препълниш флоата преди това да стане. |
|
| Страница 1 от 1 | Часовете са според зоната UTC + 2 часа [ DST ] |
| Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |
|