![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| Grol |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 159 Регистрация: 5.5.2005 Где: Россия Репутация: нет Всего: нет |
Значит суть вопроса в следующем: В Delphi есть математические функции (Exp, Ln...). Эти функции очень точно вычисляются и, если организовать цикл например на 100000 итераций, на каждой итерации будет вычисляться Exp(), то это будет достаточно длительно. Мне точность большая не нужна! И я написал функцию, которая вычисляет возведение экспоненты в степень, с небольшой точностью, но как показало время - она выполняется быстрее, чем через функцию Delphi Exp().
Вот эта функция:
Может кто-то знает, как еще быстрее организовать эту функцию, например превратить код Delphi в Asm. А, да меня еще интересует функция Ln(), также как Exp(), как ее можно быстрее организовать, опять же мне большая точность не нужна. Заранее большое всем спасибо за предоставленную информацию и ответы. --------------------
Живи так, как будто тебе предстоит умереть завтра...Учись так, как будто тебе предстоит жить вечно......... |
|||
|
||||
| Sunvas |
|
|||
|
Соль и сахар ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3388 Регистрация: 12.3.2006 Где: Тосно Репутация: 28 Всего: 89 |
Ну, я думаю, что быстрее ассемблера реализации не найти. В интерненет есть очень много решений твоей проблемы и именно на ассемблере.. Ищи. -------------------- Воспитывая детей по своему образу и подобию, родители почему-то надеются, что они будут лучше их. |
|||
|
||||
| Snowy |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 192 Всего: 484 |
|
||||
|
|||||
| Grol |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 159 Регистрация: 5.5.2005 Где: Россия Репутация: нет Всего: нет |
Спасибо всем за ответы. Я понимаю, что функции Exp и Ln в Delphi уже на asm. Но они вычисляются с большой точностью, а мне это не нужно, как я уже говорил в предыдущем моём посте. И написанная мной функция вычисляется быстрей, чем стандартная Delphi, так как я не придерживаюсь большой точности.
--------------------
Живи так, как будто тебе предстоит умереть завтра...Учись так, как будто тебе предстоит жить вечно......... |
|||
|
||||
| Grol |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 159 Регистрация: 5.5.2005 Где: Россия Репутация: нет Всего: нет |
Извините конечно меня за наглость и ламерство....но я поискал по инету, что-то по Exp и Ln я ничего не нашел. Помогите пожалуйста с решением проблемы. Наверняка кто-то уже находил или делал сам самое быстрое возведение экспоненты в дробную степень и нахождение натурального логарифма от дробного аргумента. Еще раз извиняюсь за мое ламерство....всех благодарю за помощь.
--------------------
Живи так, как будто тебе предстоит умереть завтра...Учись так, как будто тебе предстоит жить вечно......... |
|||
|
||||
| Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 192 Всего: 484 |
Стандартная Exp работает в 2 раза быстрее. В моем тесте вычисления прошли за 23 сек. А по твоей функции за 43. Хотя говорить о скорости алгоритма сложно - Exp использует вычисление с плавающей точкой процессора. Так что тут показатель очень зависит от процессора. Я тестил на CeleronM 1.4. |
|||
|
||||
| Grol |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 159 Регистрация: 5.5.2005 Где: Россия Репутация: нет Всего: нет |
А как все таки сделать так, чтоб Exp и Ln выполнялись быстрее?
--------------------
Живи так, как будто тебе предстоит умереть завтра...Учись так, как будто тебе предстоит жить вечно......... |
|||
|
||||
| Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 192 Всего: 484 |
Поставить процессор помощнее.
По другому никак. Элементарные инструкции не сократишь. Снижение точности тут никакой роли не сыграет. Для процессора это биты. А больше или меньше точность - битов останется столько же. |
|||
|
||||
| Grol |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 159 Регистрация: 5.5.2005 Где: Россия Репутация: нет Всего: нет |
Я когда говорю про точность имею ввиду, что Exp или Ln можно разложить в ряд, например Макларена. И процессор будет иметь дело с простейшими арифметическими операциями., кстати там и можно контролировать точность, закрепив в ряде определенное количество слагаемых. Просто я не знаю Asm, а так, еслиб знал, может быть сам реализовал. Значит никто не знает как решить мой вопрос?!
--------------------
Живи так, как будто тебе предстоит умереть завтра...Учись так, как будто тебе предстоит жить вечно......... |
|||
|
||||
| Wing |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 39 Регистрация: 19.3.2006 Репутация: нет Всего: нет |
||||
|
||||
| zalex |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 129 Регистрация: 13.5.2005 Репутация: 2 Всего: 2 |
Господа, а можно я вопрос задам?
Каким образом функция, вычисление которой, если я не ошибаюсь, АППАРАТНО встроено в сопроцессор может работать медленнее своей эмуляции на процессоре? Или дело в точности? |
|||
|
||||
| Sunvas |
|
|||
|
Соль и сахар ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3388 Регистрация: 12.3.2006 Где: Тосно Репутация: 28 Всего: 89 |
-------------------- Воспитывая детей по своему образу и подобию, родители почему-то надеются, что они будут лучше их. |
|||
|
||||
| Grol |
|
||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 159 Регистрация: 5.5.2005 Где: Россия Репутация: нет Всего: нет |
А вот например у меня есть, алгоритм (новый) возведения экспоненты в степень, его кто-нибудь может в Asm перевести:
А перед тем как использовать эту функцию просто необходимо определить знак степени, т.е. отрицательная степень или нет. Так как, если степень экспоненты отрицательная ряд сходится медленнно. Пример:
Тогда больше мне уже ничего будет не нужно, т.к. я понимаю если это перевести в Asm, то работать это будет быстрее. Это сообщение отредактировал(а) Grol - 1.5.2006, 13:11 --------------------
Живи так, как будто тебе предстоит умереть завтра...Учись так, как будто тебе предстоит жить вечно......... |
||||
|
|||||
![]()
|
| Правила форума "Delphi: Общие вопросы" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |