[Python-checkins] CVS: python/dist/src/Objects complexobject.c,2.33,2.34 floatobject.c,2.80,2.81
Tim Peters
tim_one@usw-pr-cvs1.sourceforge.net
Sun, 11 Mar 2001 00:37:33 -0800
Update of /cvsroot/python/python/dist/src/Objects
In directory usw-pr-cvs1:/tmp/cvs-serv3566/python/dist/src/Objects
Modified Files:
complexobject.c floatobject.c
Log Message:
When 1.6 boosted the # of digits produced by repr(float), repr(complex)
apparently forgot to play along. Make complex act like float.
Index: complexobject.c
===================================================================
RCS file: /cvsroot/python/python/dist/src/Objects/complexobject.c,v
retrieving revision 2.33
retrieving revision 2.34
diff -C2 -r2.33 -r2.34
*** complexobject.c 2001/01/18 01:12:39 2.33
--- complexobject.c 2001/03/11 08:37:29 2.34
***************
*** 10,14 ****
--- 10,29 ----
#include "Python.h"
+ /* Precisions used by repr() and str(), respectively.
+ The repr() precision (17 significant decimal digits) is the minimal number
+ that is guaranteed to have enough precision so that if the number is read
+ back in the exact same binary value is recreated. This is true for IEEE
+ floating point by design, and also happens to work for all other modern
+ hardware.
+
+ The str() precision is chosen so that in most cases, the rounding noise
+ created by various operations is suppressed, while giving plenty of
+ precision for practical use.
+ */
+
+ #define PREC_REPR 17
+ #define PREC_STR 12
+
/* elementary operations on complex numbers */
***************
*** 174,178 ****
cv.imag = 0.;
return cv;
! }
}
--- 189,193 ----
cv.imag = 0.;
return cv;
! }
}
***************
*** 185,202 ****
static void
! complex_buf_repr(char *buf, PyComplexObject *v)
{
if (v->cval.real == 0.)
! sprintf(buf, "%.12gj", v->cval.imag);
else
! sprintf(buf, "(%.12g%+.12gj)", v->cval.real, v->cval.imag);
}
static int
complex_print(PyComplexObject *v, FILE *fp, int flags)
- /* flags -- not used but required by interface */
{
char buf[100];
! complex_buf_repr(buf, v);
fputs(buf, fp);
return 0;
--- 200,218 ----
static void
! complex_to_buf(char *buf, PyComplexObject *v, int precision)
{
if (v->cval.real == 0.)
! sprintf(buf, "%.*gj", precision, v->cval.imag);
else
! sprintf(buf, "(%.*g%+.*gj)", precision, v->cval.real,
! precision, v->cval.imag);
}
static int
complex_print(PyComplexObject *v, FILE *fp, int flags)
{
char buf[100];
! complex_to_buf(buf, v,
! (flags & Py_PRINT_RAW) ? PREC_STR : PREC_REPR);
fputs(buf, fp);
return 0;
***************
*** 206,211 ****
complex_repr(PyComplexObject *v)
{
char buf[100];
! complex_buf_repr(buf, v);
return PyString_FromString(buf);
}
--- 222,235 ----
complex_repr(PyComplexObject *v)
{
+ char buf[100];
+ complex_to_buf(buf, v, PREC_REPR);
+ return PyString_FromString(buf);
+ }
+
+ static PyObject *
+ complex_str(PyComplexObject *v)
+ {
char buf[100];
! complex_to_buf(buf, v, PREC_STR);
return PyString_FromString(buf);
}
***************
*** 542,546 ****
(hashfunc)complex_hash, /* tp_hash */
0, /* tp_call */
! 0, /* tp_str */
0, /* tp_getattro */
0, /* tp_setattro */
--- 566,570 ----
(hashfunc)complex_hash, /* tp_hash */
0, /* tp_call */
! (reprfunc)complex_str, /* tp_str */
0, /* tp_getattro */
0, /* tp_setattro */
Index: floatobject.c
===================================================================
RCS file: /cvsroot/python/python/dist/src/Objects/floatobject.c,v
retrieving revision 2.80
retrieving revision 2.81
diff -C2 -r2.80 -r2.81
*** floatobject.c 2001/03/06 12:14:54 2.80
--- floatobject.c 2001/03/11 08:37:29 2.81
***************
*** 315,319 ****
static int
float_print(PyFloatObject *v, FILE *fp, int flags)
- /* flags -- not used but required by interface */
{
char buf[100];
--- 315,318 ----