diff options
author | Guido van Rossum <guido@python.org> | 1996-01-12 01:09:56 (GMT) |
---|---|---|
committer | Guido van Rossum <guido@python.org> | 1996-01-12 01:09:56 (GMT) |
commit | 8a5c5d277eba096c4f12fdcdf5b3550d63f6bc56 (patch) | |
tree | 61baa912d1a052436cda4215a6f53c856b9a6a95 /Python/bltinmodule.c | |
parent | 0bfd6c33fa5af32a0e095bf2c3f645db259ef96c (diff) | |
download | cpython-8a5c5d277eba096c4f12fdcdf5b3550d63f6bc56.zip cpython-8a5c5d277eba096c4f12fdcdf5b3550d63f6bc56.tar.gz cpython-8a5c5d277eba096c4f12fdcdf5b3550d63f6bc56.tar.bz2 |
changes for complex numbers
Diffstat (limited to 'Python/bltinmodule.c')
-rw-r--r-- | Python/bltinmodule.c | 54 |
1 files changed, 53 insertions, 1 deletions
diff --git a/Python/bltinmodule.c b/Python/bltinmodule.c index 9445255..dca31ac 100644 --- a/Python/bltinmodule.c +++ b/Python/bltinmodule.c @@ -281,6 +281,51 @@ builtin_compile(self, args) return compile_string(str, filename, start); } +#ifndef WITHOUT_COMPLEX + +static object * +builtin_complex(self, args) + object *self; + object *args; +{ + object *r, *i; + number_methods *nbr, *nbi; + complex cr, ci; + + i = NULL; + if (!newgetargs(args, "O|O:complex", &r, &i)) + return NULL; + if ((nbr = r->ob_type->tp_as_number) == NULL || + nbr->nb_float == NULL || (i != NULL && + ((nbi = i->ob_type->tp_as_number) == NULL || + nbi->nb_float == NULL))) { + err_setstr(TypeError, + "complex() argument can't be converted to complex"); + return NULL; + } + if (is_complexobject(r)) + cr = ((complexobject*)r)->cval; + else { + cr.real = getfloatvalue((*nbr->nb_float)(r)); + cr.imag = 0.; + } + if (i == NULL) { + ci.real = 0.; + ci.imag = 0.; + } + else if (is_complexobject(i)) + ci = ((complexobject*)i)->cval; + else { + ci.real = getfloatvalue((*nbi->nb_float)(i)); + ci.imag = 0.; + } + cr.real -= ci.imag; + cr.imag += ci.real; + return newcomplexobject(cr); +} + +#endif + static object * builtin_dir(self, args) object *self; @@ -954,7 +999,11 @@ do_pow(v, w) err_setstr(TypeError, "pow() requires numeric arguments"); return NULL; } - if (is_floatobject(w) && getfloatvalue(v) < 0.0) { + if ( +#ifndef WITHOUT_COMPLEX + !is_complexobject(v) && +#endif + is_floatobject(w) && getfloatvalue(v) < 0.0) { if (!err_occurred()) err_setstr(ValueError, "negative number to float power"); return NULL; @@ -1394,6 +1443,9 @@ static struct methodlist builtin_methods[] = { {"cmp", builtin_cmp, 1}, {"coerce", builtin_coerce, 1}, {"compile", builtin_compile, 1}, +#ifndef WITHOUT_COMPLEX + {"complex", builtin_complex, 1}, +#endif {"delattr", builtin_delattr, 1}, {"dir", builtin_dir, 1}, {"divmod", builtin_divmod, 1}, |