![]() |
![]() ![]() ![]() ![]() ![]() |
![]() |
Функция возведения в степень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 |