# [NumPy-Tickets] [NumPy] #1546: function prod fails over arrays without warm

NumPy Trac numpy-tickets@scipy....
Thu Jul 15 09:12:10 CDT 2010

```#1546: function prod fails over arrays without warm
-----------------------+----------------------------------------------------
Reporter:  mmarquez  |       Owner:  somebody
Type:  defect    |      Status:  closed
Priority:  normal    |   Milestone:  2.0.0
Component:  Other     |     Version:
Resolution:  wontfix   |    Keywords:  function prod
-----------------------+----------------------------------------------------
Changes (by pv):

* status:  new => closed
* resolution:  => wontfix

Comment:

Numpy is intended for high-performance computing, and attempts to stay
close to the hardware level. This includes following the integer
arithmetic of current hardware. This is a conscious design decision.
Possible discussion about changing this should be directed to the mailing
list.

Unlike for floating-point numbers, there is usually no hardware-level
performance-efficient way to detect integer overflows. Numpy is the same
boat as C and many other languages in this, and does not attempt to do

The phrase "modular arithmetic" is perhaps a bit vague, probably should be
corrected to "the modular hardware arithmetic". You can verify that the
result coincides with modular arithmetic, exactly as claimed:
{{{
def modulo(x):
x -= 2**32 * (x//(2**32))
while x > 2**31 - 1:
x -= 2**32
while x < -2**31:
x += 2**32
return x

def fact(n):
# Python arbitrary-precision integers
return reduce(lambda a, b: a*b, range(2, long(n)+1))

def fact2(n):
return reduce(lambda a, b: modulo(a*b), range(2, long(n)+1))

for i in range(2,50,5):
print "Fact of i %d is %d == %d" % (i, modulo(fact(i)), fact2(i))
}}}

--
Ticket URL: <http://projects.scipy.org/numpy/ticket/1546#comment:2>
NumPy <http://projects.scipy.org/numpy>
My example project
```