From: Finn B. <bc...@us...> - 2001-07-16 16:16:56
|
Update of /cvsroot/jython/jython/org/python/core In directory usw-pr-cvs1:/tmp/cvs-serv31650 Modified Files: PyComplex.java Log Message: _div(): Minic the way CPython-2.1 does complex division. Index: PyComplex.java =================================================================== RCS file: /cvsroot/jython/jython/org/python/core/PyComplex.java,v retrieving revision 2.6 retrieving revision 2.7 diff -C2 -r2.6 -r2.7 *** PyComplex.java 2001/04/04 19:06:45 2.6 --- PyComplex.java 2001/07/16 16:16:53 2.7 *************** *** 154,163 **** } ! private final static PyObject _div(PyComplex o1, PyComplex o2) { ! double denom = o2.real*o2.real+o2.imag*o2.imag; ! if (denom == 0) ! throw Py.ZeroDivisionError("complex division"); ! return new PyComplex((o1.real*o2.real + o1.imag*o2.imag)/denom, ! (o1.imag*o2.real - o1.real*o2.imag)/denom); } --- 154,176 ---- } ! private final static PyObject _div(PyComplex a, PyComplex b) { ! double abs_breal = b.real < 0 ? -b.real : b.real; ! double abs_bimag = b.imag < 0 ? -b.imag : b.imag; ! if (abs_breal >= abs_bimag) { ! // Divide tops and bottom by b.real ! if (abs_breal == 0.0) { ! throw Py.ZeroDivisionError("complex division"); ! } ! double ratio = b.imag / b.real; ! double denom = b.real + b.imag * ratio; ! return new PyComplex((a.real + a.imag * ratio) / denom, ! (a.imag - a.real * ratio) / denom); ! } else { ! /* divide tops and bottom by b.imag */ ! double ratio = b.real / b.imag; ! double denom = b.real * ratio + b.imag; ! return new PyComplex((a.real * ratio + a.imag) / denom, ! (a.imag * ratio - a.real) / denom); ! } } |