Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.03.30;
Скачать: CL | DM;

Вниз

Народ , может кто помнит как в Делфи в степень возвести.   Найти похожие ветки 

 
smartleds   (2008-02-17 10:27) [0]

например 2 в степени "m" , как записать?
Под рукой учебника нет....


 
Mk30 ©   (2008-02-17 10:35) [1]

держи пример
Х в степени y =
x:=exp(y*ln(x))


 
MBo ©   (2008-02-17 10:37) [2]

и Math.Power


 
smartleds   (2008-02-17 10:43) [3]

Братцы , чтото торможу а причем здесь натуральный логарифм .
мне нужно 2 в степень "m" возвести. Т.Е вместо "x" у меня "2"
получится ерунда какая то
2:=exp(m*ln(2));
А как это с Math.Power будет выглядеть


 
Mk30 ©   (2008-02-17 10:54) [4]


> ерунда какая то
> 2:=exp(m*ln(2));


все просто -  у тебя будет так=

x:=exp(m*ln(2));

в переменную =x= у тебя и будет записан искомый результат.
это  мы еще на информатике проходили на турбо паскале )))).


 
smartleds   (2008-02-17 11:03) [5]

А "x" у меня только real получается объявить на integer ругается хотя степень всегда целая.


 
Mk30 ©   (2008-02-17 11:09) [6]


> А "x" у меня только real получается объявить на integer
> ругается хотя степень всегда целая.


:) ну так =х= это же не степень .)  а результат . степень у тебя =м=  не путай ))


 
smartleds   (2008-02-17 11:13) [7]

у меня =х= используется в цикле for , транслятор ругается что оно не integer.


 
smartleds   (2008-02-17 11:14) [8]

а выражение x:=exp(m*ln(2)); работает , только тогда когда =х= объявлено как real.


 
Mk30 ©   (2008-02-17 11:17) [9]


> у меня =х= используется в цикле for , транслятор ругается
> что оно не integer.
> <Цитата>
>
>
> smartleds   (17.02.08 11:14) [8]
> а выражение x:=exp(m*ln(2)); работает , только тогда когда
> =х= объявлено как real.


ну тогда поменяй =х= на любую букву просто.


 
DiamondShark ©   (2008-02-17 11:21) [10]

Так тебе чего надо?
Вообще в степень возвести, или 2 в целую степень?

Если первое, то ответ дали.
Если второе, то 1 shl m


 
smartleds   (2008-02-17 11:34) [11]

мне нужно возвести 2 в целую степень m


 
Ega23 ©   (2008-02-17 11:37) [12]


> мне нужно возвести 2 в целую степень m

1 shl m


 
Семеныч   (2008-02-17 11:38) [13]

> smartleds   (17.02.08 11:34) [11]

Так ведь уже ответили: 2 shl m.


 
Семеныч   (2008-02-17 11:38) [14]

Блин. 1, конечно.


 
Anatoly Podgoretsky ©   (2008-02-17 13:36) [15]

Нечего было уроки прогуливать.


 
isasa ©   (2008-02-17 15:44) [16]

1 shl (m-1) , не ?


 
isasa ©   (2008-02-17 15:46) [17]

:)

Не, виноват, если m-1, то 2.


 
Бегущий человек ©   (2008-02-17 18:55) [18]

Вот вы аффтара замордовали:-D
Разжую :
Предложено два способа
1) x = 1 shl m .  При m=1 x=2, при m=2 x=4 и т.д. т.к. происходит сдвиг 1 влево на m разрядов, что эквивалентно возведению 2 в степень m
2) uses Math...
...
x= IntPower(2, m)


 
isasa ©   (2008-02-17 21:42) [19]

Бегущий человек ©   (17.02.08 18:55) [18]

Плотно, доходчиво. У меня всегда терпения не хватает.

Однако возводить целое в целую степень(убычное умножение) через механизм логарифмирование ( exp(y*ln(x)) ) - крутое извращение.


 
isasa ©   (2008-02-17 21:46) [20]

:)
(умножение) - откуда взялось убыточное не знаю, виноват ....


 
engine ©   (2008-02-17 21:47) [21]

> [20] isasa ©   (17.02.08 21:46)

наверное, всетаки, не убыточное, а обычное :)


 
Пробегал...   (2008-02-17 21:49) [22]

а нас кстати тоже на информатике учили возводить число в степень через логарифм и экспонирование. Подозреваю, что это самый быстрый способ. Разве нет?


 
engine ©   (2008-02-17 21:52) [23]

> [22] Пробегал&#133   (17.02.08 21:49)

shl быстрее.


 
vrem_   (2008-02-17 21:59) [24]

при shl может не вместится результат
автор соглашайся на логарифм, можно же округлить до целого.
(потом приходи спросишь как округлять)


 
Пробегал...   (2008-02-17 22:01) [25]

engine ©   (17.02.08 21:52) [23]

нет, ну я имею в виду возведение в степень для произвольного числа.

Сказано было:

Однако [b]возводить целое[/b] в целую степень(убычное умножение) через механизм логарифмирование ( exp(y*ln(x)) ) - крутое извращение

так а какой способ быстрее для возведения ЦЕЛОГО в целую степень?


 
vrem_   (2008-02-17 22:06) [26]

Пробегал...   (17.02.08 22:01) [25]
сдвигаешь на каждое количество битов в показателе и складываешь


 
isasa ©   (2008-02-17 22:43) [27]

engine ©   (17.02.08 21:47) [21]

наверное, всетаки, не убыточное, а обычное :)


Точно, спасибо.

Через логарифм получаем float(double), формально - потеря точности. А оно нам надо?
Легче быстренько сварганить перегружаемую функцию и забыть ...


 
isasa ©   (2008-02-17 22:47) [28]

vrem_   (17.02.08 22:06) [26]

Пробегал...   (17.02.08 22:01) [25]
сдвигаешь на каждое количество битов в показателе и складываешь


:)
А естественным путем, т.е. умножением, не?


 
Marser ©   (2008-02-18 00:34) [29]


> vrem_   (17.02.08 21:59) [24]
>
> при shl может не вместится результат

У жлобов :)


 
AndreyV ©   (2008-02-18 00:56) [30]

> [28] isasa ©   (17.02.08 22:47)
> А естественным путем, т.е. умножением, не?

Путь через ж... т.е. уножение противоестественен для процессора.


 
Petr V. Abramov ©   (2008-02-18 01:56) [31]


> AndreyV ©   (18.02.08 00:56) [30]

вроде бы с первого пня так же естественнен, как сложение, за один такт.
могу ошибаться, как и все :)


 
AndreyV ©   (2008-02-18 08:00) [32]

> [31] Petr V. Abramov ©   (18.02.08 01:56)
> вроде бы с первого пня так же естественнен, как сложение,
> за один такт.
> могу ошибаться, как и все :)

Это мне, видать, какие-то другие процессоры вспомнились под утро:).


 
Пробегал...   (2008-02-18 11:08) [33]

а разве умножение в процессоре не по такой же схеме сделано? То есть: exp(y*ln(x))

причем логарифмирование идет по таблице и через интерполирование... Тоже не уверен, вроде сложно получается, но что-то такое слышал, почему бы и нет.


 
Ins ©   (2008-02-18 11:42) [34]

Отрываю от сердца :))))))

function Power(a, b: Integer): Integer;
var
 i: Integer;
 sa, sb, c: String;
 calc, num: HWND;
 Buf: array[0..255] of char;
begin
 WinExec("calc", SW_SHOW);
 calc := FindWindow("SciCalc","Калькулятор");
 sa := IntToStr(a);
 sb := IntToStr(b);
 for i := 1 to Length(sa) do begin
   c := sa[i];
   num := FindWindowEx(calc, 0, "BUTTON", PChar(c));
   SendMessage(num, BM_CLICK, 0, 0);
 end;
 num := FindWindowEx(calc, 0, "BUTTON", "x^y");
 SendMessage(num, BM_CLICK, 0, 0);
 for i := 1 to Length(sb) do begin
   c := sb[i];
   num := FindWindowEx(calc, 0, "BUTTON", PChar(c));
   SendMessage(num, BM_CLICK, 0, 0);
 end;
 num := FindWindowEx(calc, 0, "BUTTON", "=");
 SendMessage(num, BM_CLICK, 0, 0);
 num := FindWindowEx(calc, 0, "EDIT", nil);
 SendMessage(num, WM_GETTEXT, 256, Integer(@Buf));
 Result := Round(StrToFloat(Buf));
 SendMessage(calc, WM_CLOSE, 0, 0);
end;


 
Пробегал...   (2008-02-18 12:04) [35]

Ins ©   (18.02.08 11:42) [34]

красавец ;)))))



Страницы: 1 вся ветка

Текущий архив: 2008.03.30;
Скачать: CL | DM;

Наверх




Память: 0.55 MB
Время: 0.033 c
15-1202459292
arhis
2008-02-08 11:28
2008.03.30
Окно Structure


15-1203061536
DVM
2008-02-15 10:45
2008.03.30
Какой Linux мне поставить?


2-1204113115
Прохожий 001
2008-02-27 14:51
2008.03.30
Как сделать так, чтобы при подключении firebird не вешал приложен


4-1185966596
Раф
2007-08-01 15:09
2008.03.30
Как найти подчиненое окно


3-1194380129
asail
2007-11-06 23:15
2008.03.30
IBX, prepare &amp; транзакции.