1. Заголовок или название темы должно быть информативным !
2. Все тексты фрагментов программ должны помещаться в теги [code] ... [/code] или [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ" и используйте ПОИСК !
4. НЕ используйте форум для личного общения!
5. Самое главное - это раздел теоретический, т.е. никаких задач и программ (за исключением небольших фрагментов) - для этого есть отдельный раздел!
| TarasBer |
3.01.2009 22:24
Сообщение
#1
|
![]() Злостный любитель ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 755 Пол: Мужской Репутация: 62 |
Итак у нас, например, такая задача. Вещественное число из диапазона от 0 до 65535 преобразовать в word взятием целой части.
Это программа для дельфы.
Программа на моём селероне с 600 мегагерцами вывела вот что: Код Standart trunc: 1913 My trunc: 681 Floating point division: 1582 Результат налицо - стандартный транк медленнее даже столь дорогостоящей операции, как вещественное деление. Изврат, использующий внутренню структуру типа double, оказался намного быстрее. Для турбо паскаля аналогичная проверка выглядит так:
Программа показала вот что: Код Standart trunc: 58 My trunc: 7 Floating point division: 27 Тут результат ещё более на лицо. Доктор, доктор, что мне делать по этому поводу? -------------------- |
![]() ![]() |
| volvo |
3.01.2009 23:39
Сообщение
#2
|
|
Гость |
Цитата Доктор, доктор, что мне делать по этому поводу? Использовать "изврат, использующий внутреннюю структуру double", если он у тебя работает быстрее... Только вот будет ли оно действительно настолько быстрее, если числа будут меняться - это вопрос... Маленький эксперимент:randomize;- выдает уже Цитата Standart trunc: 453 , хотя исходный код выдавалFastTrunc: 391 My trunc: 390 Floating point division: 610 Цитата Standart trunc: 312 , то есть, подавляющего преимущества уже нет...FastTrunc: 62 My trunc: 16 Floating point division: 16 Если есть SSE, то Trunc можно немного ускорить: function myTrunc(X: single): integer;, но на Селероне - вряд ли это применимо. |
TarasBer Почему Trunc так медлителен? 3.01.2009 22:24
Account Лечиться собственным кодом:) 3.01.2009 23:21
TarasBer Дело в том, что я продолжаю гоняться за наивной де... 4.01.2009 0:07
volvo FastTrunc - это уже дополнительно написанная функц... 4.01.2009 0:14
TarasBer
Нет, не макрос, именно функция...
Это всё объя... 4.01.2009 0:23
volvo Ну, заменим генерацию и умножение на доступ к элем... 4.01.2009 1:39
volvo Кстати, вот вариант от Merlyn-а, который перекрыва... 4.01.2009 12:09
TarasBer
const Half: double = 0.5 ;
asm
fld d
fs... 4.01.2009 15:50![]() ![]() |
|
Текстовая версия | 10.12.2025 21:31 |