14.01.2013, 14:31
|
#21
|
Прохожий
Регистрация: 14.01.2013
Сообщений: 3
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: Как задефайнить число в степени?
И кстати макросы вроде:
Код:
|
#define C A*B // A*10E7 == 5E7 == 50000000 |
Код:
|
#define a_ 5*5*5*5*5;
#define a a_*a_*a_*a_ |
,и т.п. будут разворачиваться в соответствующий код каждый(!) раз при их вызове, что увеличит объем скомпилированного кода и время его выполнения.
Так что я настаиваю, что в таких ситуациях(и практически во всех остальных) стоит использовать константы и шаблоны, которые есть в С++.
Стоит дважды подумать прежде чем использовать макросы.
|
|
|
|
14.01.2013, 14:32
|
#22
|
Почётный гражданин KAZUS.RU
Регистрация: 08.06.2008
Сообщений: 1,394
Сказал спасибо: 4
Сказали Спасибо 183 раз(а) в 167 сообщении(ях)
|
Re: Как задефайнить число в степени?
Сообщение от Aleksey_M
|
Если интересно - проверьте. Возьмет и запишет. Но константа потому и константа , что запишет всего один раз.
|
Я проверил - вот результат.
Посмотреть бы как у Вас IAR это скушал
|
|
|
|
14.01.2013, 16:07
|
#23
|
Гражданин KAZUS.RU
Регистрация: 13.06.2005
Адрес: РК г.Павлодар
Сообщений: 866
Сказал спасибо: 99
Сказали Спасибо 216 раз(а) в 140 сообщении(ях)
|
Re: Как задефайнить число в степени?
Сообщение от andries5
|
не
#else a=4
а
#elseif a==4
скорее всего.
И не
#if a=3
а
#if a==3
Где то так.
|
Ну уж если вы буквоед то правильно
#elif
__________________
Не ошибается лишь тот, кто ни чего не делает!
|
|
|
|
14.01.2013, 16:09
|
#24
|
Вид на жительство
Регистрация: 18.04.2008
Сообщений: 373
Сказал спасибо: 103
Сказали Спасибо 50 раз(а) в 40 сообщении(ях)
|
Re: Как задефайнить число в степени?
Сообщение от Aleksey_M
|
И кстати макросы вроде:
Код:
|
#define C A*B // A*10E7 == 5E7 == 50000000 |
Код:
|
#define a_ 5*5*5*5*5;
#define a a_*a_*a_*a_ |
,и т.п. будут разворачиваться в соответствующий код каждый(!) раз при их вызове, что увеличит объем скомпилированного кода и время его выполнения.
Так что я настаиваю, что в таких ситуациях(и практически во всех остальных) стоит использовать константы и шаблоны, которые есть в С++.
Стоит дважды подумать прежде чем использовать макросы.
|
Ну и пускай себе! Компилятор вычисляет константные выражения, прежде чем включать их в код. Так что в результате везде будет просто 3125. А вот A*10E7 == 5E8
|
|
|
|
14.01.2013, 16:13
|
#25
|
Гражданин KAZUS.RU
Регистрация: 13.06.2005
Адрес: РК г.Павлодар
Сообщений: 866
Сказал спасибо: 99
Сказали Спасибо 216 раз(а) в 140 сообщении(ях)
|
Re: Как задефайнить число в степени?
Сообщение от Ivan Panov
|
Речь шла о компиляторе IAR а не о бейсике.
Почему Вы не хотите воспользоваться вариантом, указанным в документации?
Код:
|
#define A 5
#define B 10E7
#define C A*B // A*10E7 == 5E7 == 50000000 |
|
Вообще то нужно получить 10 в пятой, а не 50000000
__________________
Не ошибается лишь тот, кто ни чего не делает!
|
|
|
|
14.01.2013, 16:32
|
#26
|
Вид на жительство
Регистрация: 18.04.2008
Сообщений: 373
Сказал спасибо: 103
Сказали Спасибо 50 раз(а) в 40 сообщении(ях)
|
Re: Как задефайнить число в степени?
Сообщение от woroba
|
Вообще то нужно получить 10 в пятой, а не 50000000
|
Ну, 10^5-то как раз проще:
Код:
|
#define TenPow(P) 10E##P |
|
|
|
|
14.01.2013, 23:04
|
#27
|
Гражданин KAZUS.RU
Регистрация: 04.08.2006
Сообщений: 911
Сказал спасибо: 28
Сказали Спасибо 180 раз(а) в 139 сообщении(ях)
|
Re: Как задефайнить число в степени?
Сообщение от ulasenko
|
Я бы переписал в нормальную функцию.
Дирректива define - это определение макроса, то есть все, что в ней описано - копируется в код. Чем сложнее макрос и чем чаще он используется, тем больше объем исполняемого файла.
Предполагаю, что в первом варианте автор допустил ошибку(причина - ...), но это совсем НЕ значит, что эту ошибку следует поддерживать и далее.
|
Вы заблуждаетесь. define не "определение макроса", а макроподстановка. Иными словами вместо кодового слова будет подставлено символьное его определение. Таким образом результат в символах может быть очень значительным ... например целая строка выражений и формул. Но выссказывание "и чем чаще он используется, тем больше объем исполняемого файла" абсолютно неверен. Если значение вычисленного выражения будет константа, то в результате будет вычислена константа на этапе прекомпиляции (результат вычисления можно посмотреть в файле) и подставлено. Если вы подставляете туда переменную либо функцию, то тогда другое дело.
|
|
|
|
14.01.2013, 23:49
|
#28
|
Почётный гражданин KAZUS.RU
Регистрация: 08.06.2008
Сообщений: 1,394
Сказал спасибо: 4
Сказали Спасибо 183 раз(а) в 167 сообщении(ях)
|
Re: Как задефайнить число в степени?
Начинается... прекомпиляцию ужи сюды притянули.
|
|
|
|
14.01.2013, 23:52
|
#29
|
Прописка
Регистрация: 18.01.2006
Сообщений: 268
Сказал спасибо: 81
Сказали Спасибо 476 раз(а) в 127 сообщении(ях)
|
Re: Как задефайнить число в степени?
Если компилятор нормально понимает шаблоны можно так, все вычисления на этапе компиляции, в код попадает нужная константа
Код:
|
template ‹int TB, int TP› class CStaticPow
{
public:
enum eRez
{
Rez=CStaticPow‹TB,TP-1›::Rez*TB,
};
};
template ‹int TB› class CStaticPow‹TB,1›
{
public:
enum eRez
{
Rez=TB,
};
}; |
Использование
int iRez=CStaticPow‹5,7›::Rez; // 5^7
|
|
|
|
15.01.2013, 00:16
|
#30
|
Почётный гражданин KAZUS.RU
Регистрация: 08.06.2008
Сообщений: 1,394
Сказал спасибо: 4
Сказали Спасибо 183 раз(а) в 167 сообщении(ях)
|
Re: Как задефайнить число в степени?
Ну степень равную 0 мы упадем - ежу понятно.
А какова максимальная степень?
2 в степени 20 хоть даст или рекурсией подавится?
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 13:21.
|
|