Функция возведения в степень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 и FreePascal. Комментарии и вопросыМатериалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта. :: Главная :: Математика ::
|
||||
©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007 |