· Начало · Статистика · WASM.RU · Noir.Ru ·

 WASM Phorum (Оффлайн - 24.11.2003) —› WASM.ASSEMBLER —› арифметический спроцессоррррр

<< . 1 . 2 .

Посл.отвђт Сообщенiе


Дата: Сен 19, 2003 23:40:43

emergenter

КАКАЯ к черту ОБРАТНАЯ ПОЛЬСКАЯ НОТАЦИЯ!??? Ты хоть знаешь что такое вообще ПОЛЬСКАЯ НОТАЦИЯ???

В данном случае может быть и ни при чем, а вообще, если бы это было произвольное арифметическое выражение неизвестного рамера и вложенности, очень даже причем.

Черт возьми, чем арифметическое выражение отличается от терма в логике?


Дата: Сен 20, 2003 02:10:16

emergenter
КАКАЯ к черту ОБРАТНАЯ ПОЛЬСКАЯ НОТАЦИЯ!??? Ты хоть знаешь что такое вообще ПОЛЬСКАЯ НОТАЦИЯ???
Нет, это вы, многоуважаемый господин emergenter зря наезжаете на человека!!! Я как только прочитал первый пост i2i сразу вспомнил про HP49G и подобные игрушки. Там принцип такой:
1. Получить коэффициенты полинома.
2. Применить мат. метод для нахождения корней (если память не изменяет, обычно применяется метод Ньютона).
3. Проверить найденный корень.
4. Повторять 2-3 до нахождения всех корней.

ЗЫ: Надеюсь вы знаете сколько всего корней (включая комлексные) должен иметь полином степени N?
ЗЫЫ: Даже не спрашивайте причём здесь RPN :)))


Дата: Сен 20, 2003 11:04:54

KiNDeR
Нет не сложные, просто на первом курсе физмата,
на уроке информатике препод сказал, кто решит
квадратное уравнение, того освобожу от зачета.
Все, в том числе и я ринулись, решать но не учли
комплексных корней и нас жестоко обламили...:))


Ааааа. :)))
Моя любимая.. методика обучения.. Чтобы сам на ошибку напоролся :))
Но от то хоть зачёт поставил?
То, что обламал это одно.. но ведь он должен был и труд оценить. Я бы на его месте дал время на дописание проги.
Это было бы по-честному.

i2i
Тут есть 2 мои статьи об FPU. Они не влучшем виде :((
Но всё таки в них есть кое что такое, чего нет ни в одном мануале... Пригодятся.


Дата: Сен 20, 2003 11:11:45 · Поправил: Edmond

emergenter
Quantum
Нет, это вы, многоуважаемый господин emergenter зря наезжаете на человека!!!

Что касается ОБРАТНОЙ польской нотации, то здесь она не нужна. Это вы конечно перегнули палку.
Она используется только тогда, когда нужно проанализировать выражение на его Синтаксический СМЫСЛ, или выполнить вычисление.

А в данном случае, анализ другой. Мы просто проверяем где x^2, и забираем коэффициенты.

Так, что emergenter в принципе прав.

Анализ этого выражения сводится к поиску x переменных.. и всё и различие + и *...


Дата: Сен 20, 2003 11:15:47

Valery
Черт возьми, чем арифметическое выражение отличается от терма в логике?

Ну это если его рассматривать как терм :)
Вот например MathCad работает так.


Дата: Сен 20, 2003 12:50:10

Итого:
Quadratic PROC USES ds di si,
aa :DWORD, bb :DWORD, cc :DWORD, r1 :pDWORD, r2 :pDWORD

LOCAL status:WORD ; Intermediate status

LoadPtr es, di, r1 ; ES :DI points to 1st root
LoadPtr ds, si, r2 ; DS:SI points to 2nd root
sub bx, bx ; Clear error code
fld1 ; Load top of stack with 1
fadd st, st ; Double it to make 2
fld st ; Copy to next register
fmul aa ; ST register = 2a
ftst ; Test current ST value
fstsw status ; Copy status to local word
fwait ; Ensure coprocessor is done
mov ax, status ; Copy status into AX
sahf ; Load flag register
jnz notzero ; If C3 set, a = 0, in which case
; solution is x = -c / b
fld cc ; Load c parameter
fchs ; Reverse sign
fld bb ; Load b parameter
ftst ; Test current ST value
fstsw status ; Copy status to local word
fwait ; Ensure coprocessor is done
mov ax, status ; Copy status into AX
sahf ; Load flag register
jz exit2 ; If C3 set, b = 0, in which case
; division by zero
fdiv ; Divide by B
fstp DWORD PTR es:[di] ; Copy result and pop stack
fstp st ; Clean up stack
jmp exit1 ; Return with code = 1
notzero:
fmul st(1), st ; ST(1) register = 4a
fxch ; Exchange ST and ST(1)
fmul cc ; ST register = 4ac
ftst ; Test current ST value
fstsw status ; Copy status to local word
fwait ; Ensure coprocessor is done
mov ax, status ; Copy status into AX
sahf ; Load flag register
jp exit2 ; If C2 set, 4*a*c is infinite

fld bb ; Else load b parameter
fmul st, st ; Square it; ST register = b*b
fsubr ; ST register = b*b - 4*a*c
ftst ; Test current ST value
fstsw status ; Copy status to local word
fwait ; Ensure coprocessor is done
mov ax, status ; Copy status into AX
sahf ; Load flag register
jc exit2 ; If C0 set, b*b < 4ac
jnz tworoot ; If C3 set, b*b = 4ac, in which
inc bx ; case only 1 root so set flag
tworoot:
fsqrt ; Get square root
fld bb ; Load b parameter
fchs ; Reverse sign
fxch ; Exchange ST and ST1
fld st ; Copy square root to next reg
fadd st, st(2) ; ST = -b + sqrt(b*b - 4*a*c)
fxch ; Exchange ST and ST1
fsubp st(2), st ; ST = -b - sqrt(b*b - 4*a*c)

fdiv st, st(2) ; Divide 1st dividend by 2*a
fstp DWORD PTR es:[di] ; Copy result, pop stack
fdivr ; Divide 2nd dividend by 2*a
fstp DWORD PTR ds:[si] ; Copy result, pop stack
jmp exit ; Return with code
exit2:
inc bx ; Error code = 2 for indeterminancy
fstp st ; Clean stack
exit1:
inc bx ; Error code = 1 for single root
fstp st ; Clean stack
exit:
mov ax, bx
ret

Quadratic ENDP

END

<< . 1 . 2 .

Эта тема закрыта. Отвђты больше не принимаются.


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.068