Home > Enterprise >  Operating on numpy array gives incorrect values for large numbers
Operating on numpy array gives incorrect values for large numbers

Time:02-12

I need to operate on some pretty large numbers. Here, I am trying to take the cube of a large number inside an array.

import numpy as np
array=np.array([149597500000,3,4],dtype=np.int64)
print(array**3)

This gives

[4258029614102052864                  27                  64]

The second 2 values are correct, but the first one is off by many orders of magnitude. By contrast,

print(149597500000**3)

gives

3347904087604984375000000000000000

which is the correct result. Is this related to integer overflow? If so, why doesn't performing the operation outside the array also cause an overflow? How can I work around this problem? Sorry if this is a basic question; I never learned Python in a formal way.

CodePudding user response:

I would say the number of bits in the first number to the cube is at least 3*log2(149597500000) 1=113. This does not fit in a 64 bits

a = 149597500000
b= a**3
print(a.bit_length(), b.bit_length())

returns: 38, 112

you can store that bigs number in numpy using either dtype=object or np.float64, see Stocking large numbers into numpy array

  • Related