Народ, може хто пам’ятає як в Делфі в ступінь звести
наприклад 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