![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Возведение в квадрат и извлечение квадратного корня [D6, XP]
Каныбек © (2012-01-01 21:12:00)С новым годом! Вопрос такой-как возвести в квадрат и извлечь квадратную корень в Делфи. Помогите плиз.
Германн (2012-01-04 02:59:00) [1]
> asail © (04.01.12 02:46) [14]
>
>
> > Германн © (04.01.12 02:26) [13]
>
> Да я не сомневаюсь, что ты в курсе всего вышеописанного.
> Просто, новички этого могут и не знать...
Они и не знают. Но универсальная функция им точно поможет! :)
Но и вспомни Германн © (03.01.12 02:18) [8]
Если хоть какой-то из новичков это вспомнит/осознает - это уже плюс!
asail (2012-01-04 02:46:00) [2]
> Германн © (04.01.12 02:26) [13]
Да я не сомневаюсь, что ты в курсе всего вышеописанного. Просто, новички этого могут и не знать...
Германн (2012-01-04 02:26:00) [3]
> asail © (03.01.12 17:40) [10]
>
>
> > Германн © (03.01.12 02:15) [7]
>
> > А я привел универсальный вариант. Нужны ли при этом "прочие
> > разные"?
>
> Однозначно нужны!
Я вообще-то шутил. И мой тёзка понял меня. :)
asail (2012-01-03 20:13:00) [4]
> RWolf © (03.01.12 19:36) [11]
> а sqr(x) ещё быстрее
Не всегда. Вот в этом примере * быстрее, чем sqr (Д6, ХР32):
const COUNT = 2000000000;
procedure TForm1.Button1Click(Sender: TObject);
var
c, i: Cardinal;
d, x: Double;
begin
x := 2;
c := GetTickCount;
for i := 1 to COUNT do
d := Sqr(x);
ShowMessage(IntToStr((GetTickCount - c) div 1000));
end;
procedure TForm1.Button2Click(Sender: TObject);
var
c, i: Cardinal;
d, x: Double;
begin
x := 2;
c := GetTickCount;
for i := 1 to COUNT do
d := x * x;
ShowMessage(IntToStr((GetTickCount - c) div 1000));
end;
В первом случае 5 сек, во втором - 4...
Хотя, стоит сменить Double на Extended или x * x вынести в отдельную функцию, и ситуация изменится...
RWolf (2012-01-03 19:36:00) [5]
> x*x, как минимум, на порядок быстрее Power(x, 2).
именно так, а sqr(x) ещё быстрее.
asail (2012-01-03 17:40:00) [6]
> Германн © (03.01.12 02:15) [7]
> А я привел универсальный вариант. Нужны ли при этом "прочие
> разные"?
Однозначно нужны!
При возведении, например, в квадрат Power не самое лучшее решение...
x*x, как минимум, на порядок быстрее Power(x, 2).
Да даже, возведение в пятую степень через Power будет медленнее, чем х*х*х*х*х.
Так что, если в алгоритме вычислений такого рода много, то функцией Power надо пользоваться осмотрительно.
Другое дело, если, скажем, надо возвести число в степень 14.35... :)
Jeer (2012-01-03 16:36:00) [7]Есс-но, нужны :)
Германн (2012-01-03 02:18:00) [8]Кроме того, мой ответ может кого-то заставить понять/вспомнить, что "возведение в степень" частным случаем включает в себя и "извлечение корня".
:)
Германн (2012-01-03 02:15:00) [9]
> Jeer © (02.01.12 22:25) [6]
>
>
> > RWolf © (01.01.12 23:43) [4]
>
>
> Ой, вот не надо штампов, ага ?
> Я-то привел варианты разных подходов ради понимания их наличия,
> всего-то.
>
А я привел универсальный вариант. Нужны ли при этом "прочие разные"?
:)
Jeer (2012-01-02 22:25:00) [10]
> RWolf © (01.01.12 23:43) [4]
Ой, вот не надо штампов, ага ?
Я-то привел варианты разных подходов ради понимания их наличия, всего-то.
Каныбек (2012-01-02 06:14:00) [11]Спасибо ребята, работает. Удачи в новом году.
RWolf (2012-01-01 23:43:00) [12]
> Jeer © (01.01.12 21:49) [3]
> Квадрат:
y:=sqr(x);
Jeer (2012-01-01 21:49:00) [13]Квадрат:
y := x*x;
Корень:
z := sqrt(y);
Jeer (2012-01-01 21:46:00) [14]Подружить квадрат и квадратную - это две половинки одного яблока :)
Германн (2012-01-01 21:39:00) [15]uses Math
функция Power