diff options
author | Stefan van der Walt <stefan@sun.ac.za> | 2007-07-27 14:36:28 +0000 |
---|---|---|
committer | Stefan van der Walt <stefan@sun.ac.za> | 2007-07-27 14:36:28 +0000 |
commit | 2994141453421f306bcd891d559b31b554f220db (patch) | |
tree | 798e3be10369eb1c7e4b41c50ce782c937ed34de /numpy/core/src/scalarmathmodule.c.src | |
parent | e4ccde2aa3ee6b6edb5b22ad5c0dcda430dac8e1 (diff) | |
download | numpy-2994141453421f306bcd891d559b31b554f220db.tar.gz |
Convert large integer scalars to long instead of to int [patch by
Xavier]. Closes ticket #549.
Diffstat (limited to 'numpy/core/src/scalarmathmodule.c.src')
-rw-r--r-- | numpy/core/src/scalarmathmodule.c.src | 34 |
1 files changed, 29 insertions, 5 deletions
diff --git a/numpy/core/src/scalarmathmodule.c.src b/numpy/core/src/scalarmathmodule.c.src index 00f7c6ed6..0310b3567 100644 --- a/numpy/core/src/scalarmathmodule.c.src +++ b/numpy/core/src/scalarmathmodule.c.src @@ -805,11 +805,35 @@ static int /**end repeat**/ /**begin repeat - #name=(byte,ubyte,short,ushort,int,uint,long,ulong,longlong,ulonglong,float,double,longdouble,cfloat,cdouble,clongdouble)*3# - #Name=(Byte,UByte,Short,UShort,Int,UInt,Long,ULong,LongLong,ULongLong,Float,Double,LongDouble,CFloat,CDouble,CLongDouble)*3# - #cmplx=(,,,,,,,,,,,,,.real,.real,.real)*3# - #which=int*16,long*16,float*16# - #func=PyInt_FromLong*16,(PyLong_FromLongLong, PyLong_FromUnsignedLongLong)*5,PyLong_FromDouble*6,PyFloat_FromDouble*16# + #name=byte,ubyte,short,ushort,int,uint,long,ulong,longlong,ulonglong,float,double,longdouble,cfloat,cdouble,clongdouble# + #Name=Byte,UByte,Short,UShort,Int,UInt,Long,ULong,LongLong,ULongLong,Float,Double,LongDouble,CFloat,CDouble,CLongDouble# + #cmplx=,,,,,,,,,,,,,.real,.real,.real# + #sign=(signed,unsigned)*5,,,,,,# + #ctype=long*8,PY_LONG_LONG*2,double*6# + #realtyp=0*10,1*6# + #func=(PyLong_FromLong,PyLong_FromUnsignedLong)*4,PyLong_FromLongLong,PyLong_FromUnsignedLongLong,PyLong_FromDouble*6# +**/ +static PyObject * +@name@_int(PyObject *obj) +{ + @sign@ @ctype@ x= PyArrayScalar_VAL(obj, @Name@)@cmplx@; +#if @realtyp@ + double ix; + modf(x, &ix); + x = ix; +#endif + if(LONG_MIN < x && x < LONG_MAX) + return PyInt_FromLong(x); + return @func@(x); +} +/**end repeat**/ + +/**begin repeat + #name=(byte,ubyte,short,ushort,int,uint,long,ulong,longlong,ulonglong,float,double,longdouble,cfloat,cdouble,clongdouble)*2# + #Name=(Byte,UByte,Short,UShort,Int,UInt,Long,ULong,LongLong,ULongLong,Float,Double,LongDouble,CFloat,CDouble,CLongDouble)*2# + #cmplx=(,,,,,,,,,,,,,.real,.real,.real)*2# + #which=long*16,float*16# + #func=(PyLong_FromLongLong, PyLong_FromUnsignedLongLong)*5,PyLong_FromDouble*6,PyFloat_FromDouble*16# **/ static PyObject * @name@_@which@(PyObject *obj) |