Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Возведение в квадрат и извлечение квадратного корня [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


Наверх

Титульная страница Поиск, карта сайта Написать письмо