largenumber = 821424692950225218
largenumber ** 1 = 821424692950225218
largenumber ** 1.0 = 8.214246929502253e+17
int(largenumber**1.0) = 821424692950225280
Why the result is different?
largenumber = 821424692950225218
largenumber ** 1 = 821424692950225218
largenumber ** 1.0 = 8.214246929502253e+17
int(largenumber**1.0) = 821424692950225280
Why the result is different?
 
    
    The presence of a floating point number forces the operation to be performed in a floating point context, which has limited precision. On the other hand, where all the arguments are integral, Python lets ** remain in the integer domain, precision of which is only limited by available memory. Once the result is a float, casting to int cannot recover the discarded information.
tl;dr: largenumber ** 1.0 is equivalent to float(largenumber).
