Форум: "Прочее";
Текущий архив: 2008.03.30;
Скачать: [xml.tar.bz2];
ВнизНарод , может кто помнит как в Делфи в степень возвести. Найти похожие ветки
← →
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 в целую степень m1 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] Пробегал… (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;
Скачать: [xml.tar.bz2];
Память: 0.52 MB
Время: 0.045 c