Неточный результат — истинный результат не может быть точно представлен в заданном формате, результат округляется. Обработка продолжается.
На рисунке 2.5 представлен фрагмент программы, производящей суммирование положительных значений tg(X), при X = 1…25. Сумма заносится в Sum в длинном вещественном формате.
FINIT ;Вычислить значения
FLDPI ;р/2 и р/4
MOV WORD PTR [COUNT],2
FILD DWORD PTR [COUNT]
FDIV
FST QWORD PTR [PI2]
FILD DWORD PTR [COUNT]
FDIV
FSTP QWORD PTR [PI4]
MOV CX,25
MOV WORD PTR [COUNT],0
RETRY: INC WORD PTR [COUNT] ;Увеличить Х
CALL TANGENS ;Вычислить тангенс
FLDZ ;Результат < 0?
FCOMP
FSTSW STATUS
FWAIT
MOV AH,BYTE PTR [STATUS+1]
SAHF
JNB NOADD ;Да
FLD QWORD PTR [SUM] ;Наращивание суммы
FADD
FST QWORD PTR [SUM]
NOADD: FINIT
LOOP RETRY
. . .
TANGENS PROC NEAR
PUSH CX
FILD DWORD PTR [COUNT] ;Включить Х в стек
FLDPI ;Включить р в стек
FXCH ;Обменять Х и р
FTST ;Проверить знак Х
XOR BX,BX ;Флаг обратной величины
XOR CX,CX ;Флаг изменения знака
FSTSW STATUS ;Извлечь SW
FWAIT
MOV AH,BYTE PTR [STATUS+1] ;Перенести SW в р-р флагов
SAHF
JAE NORM_1 ;Х > 0
FCHS ;Изменить знак
NOT CX
NORM_1: ;Приведение Х в диапазон [0...р]
FPREM ;Вычислить остаток R от
FSTSW STATUS ;деления Х на р
FWAIT
MOV AH,BYTE PTR [STATUS + 1]
SAHF
JP NORM_1
NORM_2: ;Приведение Х в диапазон [0...р/2]
FLD QWORD PTR [PI2] ;Включить р/2 в стек
FSTP ST(2) ;R ® ST(0), р ® ST(1)
FCOM ;Сравнить R с р/2
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.