![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
возведение в квадрат
Green_Templar © (2005-05-20 00:29:00)Как в делфи грамотно возводить в квадрат?
Что лучше?
if exp(2*ln(abs(predator.x-prey.x) shr 3))+exp(2*ln(abs(predator.y-prey.y) shr 3))<=predator.eye then cansee1:=true else cansee1:=false;
или
((predator.x-prey.x) shr 3)*((predator.x-prey.x) shr 3)+((predator.y-prey.y) shr 3)*((predator.y-prey.y) shr 3)<=predator.eye then cansee1:=true else cansee1:=false;
Подскажите пожалуйста способ самого оптимального определения пересекаются ли круг и прямоугольник.
Defunct (2005-05-20 08:49:00) [41]Думкин © (20.05.05 08:39) [11]
Sqr это overload функция для разных типов, соответственно аргумент помещается в стек, внутри функции извлекается и повторно заноситмя в стек если аргумент с плавающей точкой. И того имеем как минимум:
1. вызов функции - занесение в стек EIP + извлечение EIP на выходе.
2. Резервирование в стеке места по результат: занесение результата в стек и извлечение из стека.
3. Занесение аргумента в стек и извлечение из стека.
при операции x * x как минимум пункты 1, 2 отсутствуют, а значит работает конструкция x * x однозначно быстрее, раз быстрее, значит грамотнее использовать именно ее.
Думкин (2005-05-20 08:44:00) [42]> [10] Defunct © (20.05.05 08:37)
В случае integer - похоже так, а в случае extended - не получается.
Думкин (2005-05-20 08:39:00) [43]> [10] Defunct © (20.05.05 08:37)
Ну да.
Defunct (2005-05-20 08:37:00) [44]Думкин © (20.05.05 08:17) [8]
Обосновать чем x * x лучше sqr?
begin...end (2005-05-20 08:18:00) [45]> Экспериментатор (20.05.05 08:01) [5]
Для возведения в квадрат всё же лучше Sqr.
Думкин (2005-05-20 08:17:00) [46]> [7] Defunct © (20.05.05 08:16)
И что?
Defunct (2005-05-20 08:16:00) [47]Думкин © (20.05.05 07:21) [4]
x * x
Думкин (2005-05-20 08:08:00) [48]> [3] Кщд © (20.05.05 06:25)
Зачем 5 и систему? Соединяем центр окружности и центр квадрата. Находим пересечение отрезка и квадрата. Смотрим - принадлежит ли о кругу.
Или пересечения с окружностью - смотрим принадлежит ли квадрату.
Экспериментатор (2005-05-20 08:01:00) [49]или Power из модуля math
Думкин (2005-05-20 07:21:00) [50]Грамотно в Дельфи возводить в квадрат - sqr.
Кщд (2005-05-20 06:25:00) [51]>Кто-нибудь знает хоть какой-нибудь способ как определить >пересекаются ли круг и прямоугольник :) ?
Решаем систему из 5-ти неравенств.
Если разрешима - пересекаются.
В чем сложность?
Green_Templar (2005-05-20 03:48:00) [52]Вах, канечно работают, только первый при подлогарифменном выражении равном нулю выдаёт сообщение о делении на 0.
Кто-нибудь знает хоть какой-нибудь способ как определить пересекаются ли круг и прямоугольник :) ?
jack128 (2005-05-20 00:40:00) [53]а они оба работают?? ну тогда второй быстрее, конечно. в нём экспоненты и логорифма нету.