![]() |
![]() ![]() ![]() ![]() |
|
Функция возведения в степеньDelphi , Синтаксис , Математика
Автор: Александр
{ **** UBPFD *********** by delphibase.endimus.com ****
>>
альтернатива Math.Power
Зависимости: их нет
Автор: Александр
Copyright: Александр
Дата: 12 сентября 2003 г.
***************************************************** }
function Degree(const DegBasis, DegParam: Extended): Extended;
asm
// Вход: DegBasis, DegParam --> в стеке
// Выход: Result(= DegParam в случае некорректных данных) --> ST(0)
FLD DegParam
FLDZ
FCOMIP ST, ST(1)
JNZ @@DegParam_is_not_0
FFREE ST
FLD1
JMP @@exit
@@DegParam_is_not_0:
JNC @@DegParam_is_less_than_0
XOR EAX, EAX
JMP @@cmp_DegBasis_to_0
@@DegParam_is_less_than_0:
OR EAX, 1
@@cmp_DegBasis_to_0:
FLD DegBasis
FLDZ
FCOMIP ST, ST(1)
JNZ @@DegBasis_is_not_0
TEST EAX, 1
JZ @@DegParam_is_greater_than_0
FSTP ST
JMP @@exit
@@DegParam_is_greater_than_0:
FSTP ST(1)
JMP @@exit
@@DegBasis_is_not_0:
JC @@DegBasis_is_greater_than_0
FABS
FXCH
OR EAX, 1
FLD ST
FRNDINT
FSUB ST, ST(1)
FLDZ
FCOMIP ST, ST(1)
FSTP ST
JZ @@DegParam_is_integer
FLD1
FDIV ST, ST(1)
FABS
FLD1
FCOMIP ST, ST(1)
JC @@Abs_1_div_DegParam_greater_than_1
FSTP ST
FSTP ST(1)
JMP @@exit
@@Abs_1_div_DegParam_greater_than_1:
FISTP QWORD PTR @@Int_64
TEST BYTE PTR @@Int_64, 1
JNZ @@change_a_sign_at_the_and_of_calculations
FSTP ST(1)
JMP @@exit
@@DegParam_is_integer:
FLD ST
FISTP QWORD PTR @@Int_64
TEST BYTE PTR @@Int_64, 1
JNZ @@change_a_sign_at_the_and_of_calculations
XOR EAX, EAX
@@change_a_sign_at_the_and_of_calculations:
FXCH
@@DegBasis_is_greater_than_0:
FYL2X
FLD ST
FRNDINT
FSUB ST(1), ST
FXCH
F2XM1
FLD1
FADD
FSCALE
FSTP ST(1)
TEST EAX, 1
JZ @@exit
FCHS
JMP @@exit
@@Int_64:
DQ 0
@@exit:
FWAIT
end;
Пример использования: Degree(-8, 1 / 3) = -2 Перевод контента на русский язык: Это функция Delphi, написанная на ассемблере, которая вычисляет степень основы по заданному экспоненту. Функция использует вещественные числа и обрабатывает различные краевые случаи, такие как отрицательные экспоненты, не целые экспоненты и нулевая или отрицательная основа. Вот разбивка кода:
Пример использования показывает, что функция правильно обрабатывает случаи, когда основа отрицательна и экспонента не целая. Вот некоторые предложения по улучшению: 1. Функцию можно сделать более эффективной, уменьшив количество операций с вещественными числами. 2. Обработка ошибок может быть улучшена для предоставления более конкретных сообщений об ошибках или кодов. 3. Функцию можно модифицировать для обработки комплексных чисел в качестве входных данных. 4. Документация функции может быть более подробной, чтобы объяснить логику и краевые случаи. В целом, это хорошо написанная функция, которая демонстрирует хороший уровень понимания программирования на ассемблере в Delphi. Функция возведения в степень - это альтернатива Math.Power, реализованная на языке Delphi с использованием ассемблерного кода. Комментарии и вопросыПолучайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш :: Главная :: Математика ::
|
||||
©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007 | ||||