Показать сообщение отдельно
  #3  
Старый 20.03.2018, 11:24
Аватар для dr. F.I.N.
dr. F.I.N. dr. F.I.N. вне форума
I Like it!
 
Регистрация: 12.12.2009
Адрес: Россия, г. Новосибирск
Сообщения: 660
Версия Delphi: D6/D7
Репутация: 26643
Лампочка

Покопавшись, нашел еще вариант. Полагаю то, что Вам нужно.
Код:
function TruncMEM_SSE(Var Value: Double): Integer;
asm
  // as written, fatest version
  CVTTSD2SI  EAX, [Value]
end;


И вот еще наблюдение.
Код:
function Trunc_Dbl(var Value: Double): Integer;  // VAR
var
  d_w: array[0..3] of word absolute Value;
begin
  Result := ((d_w[3] shl 11) or (d_w[2] shr 5) or $8000) shr (14 - (d_w[3] shr 4 and $03FF));
end;
В таком варианте функция Trunc_Dbc работает чуть быстрее Round (219-234 тика на том же тесте), а функция TruncMEM_SSE без VAR работает медленнее (390 тиков при том же тесте).
__________________
Грамотно поставленный вопрос содержит не менее 50% ответа.
Грамотно поставленная речь вызывает уважение, а у некоторых даже зависть.
Ответить с цитированием