Народ, може хто пам’ятає як в Делфі в ступінь звести

наприклад 2 певною мірою "m". як записати?
Під рукою підручника немає.

тримай приклад
Х в ступеня y =
x: = exp (y * ln (x))

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

все просто - # XA0; у тебе буде так =

в змінну = x = у тебе і буде записаний шуканий результат.
це # XA0; ми ще на інформатиці проходили на турбо Паскалі)))).

А "x" у мене тільки real виходить оголосити на integer лається хоча ступінь завжди ціла.


> А "x" у мене тільки real виходить оголосити на integer
> Лається хоча ступінь завжди ціла.

) Ну так = х = це ж не ступінь.) # XA0; а результат. ступінь у тебе = м = # XA0, не плутай))

у мене = х = використовується в циклі for. транслятор лається що воно не integer.

а вираз x: = exp (m * ln (2)); працює. тільки тоді коли = х = оголошено як real.


> У мене = х = використовується в циклі for. транслятор лається
> Що воно не integer.
> <Цитата>
>
>
> smartleds # XA0; (17.02.08 11:14) [8]
> А вираз x: = exp (m * ln (2)); працює. тільки тоді, коли
> = Х = оголошено як real.

ну тоді поміняй = х = на будь-яку букву просто.

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

Якщо перше, то відповідь дали.
Якщо друге, то 1 shl m

мені потрібно звести 2 в цілу ступінь m


> Мені потрібно звести 2 в цілу ступінь m

1 shl m

> smartleds # XA0; (17.02.08 11:34) [11]

Так адже вже відповіли: 2 shl m.

Нічого було уроки прогулювати.

Не, винен, якщо m-1, то 2.

Ось ви аффтар замордували: -D
розжитися:
Запропоновано два способи
1) x = 1 shl m. # XA0; При m = 1 x = 2, при m = 2 x = 4 і т.д. тому відбувається зрушення 1 вліво на m розрядів, що еквівалентно зведенню 2 в ступінь m
2) uses Math.
.
x = IntPower (2, m)

Щільно, дохідливо. У мене завжди терпіння не вистачає.

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

)
(Множення) - звідки взялося збиткове не знаю, винен.

а нас до речі теж на інформатиці вчили зводити число в ступінь через логарифм і експонування. Підозрюю, що це найшвидший спосіб. Хіба ні?

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

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

так а який спосіб швидше для зведення ЦІЛОГО в цілу ступінь?

Пробігав. # XA0; (17.02.08 22:01) [25]
зрушуєш на будь-яке число бітів в показнику і складаєш

напевно, все-таки, що не збиткове, а звичайне :)

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

vrem_ # XA0; (17.02.08 22:06) [26]

Пробігав. # XA0; (17.02.08 22:01) [25]
зрушуєш на будь-яке число бітів в показнику і складаєш

)
А природним шляхом, тобто множенням, нє?


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

У жлобів :)

а хіба множення в процесорі не по такій же схемі зроблено? Тобто: exp (y * ln (x))

причому логарифмирование йде по таблиці і через інтерполювання. Теж не впевнений, начебто складно виходить, але щось таке чув, чому б і ні.

Відриваю від серця :))))))

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

Пам'ять: 0.78 MB
Час: 0.111 c