|
|
| Посл.отвђт | Сообщен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 |
Эта тема закрыта. Отвђты больше не принимаются. |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.068 |