Python 3.1.2 da salida incorrecta al dividir dos números grandes?

a = 25! = 15511210043330985984000000 b = 12! = 479001600 c = 13! = 6227020800 

al dividir ans = (int) (a / (b * c)) o ans = (int) ((a / b) / c)

obtenemos ans = 5200299 en lugar de 5200300

En Python 3.x / significa división en coma flotante y puede dar pequeños errores de redondeo. Utilice // para la división entera.

 ans = a // (b * c)

Intenta usar división entera en lugar de división flotante.

 >>> 15511210043330985984000000 / (479001600 * 6227020800) 5200299.999999999 >>> 15511210043330985984000000 // (479001600 * 6227020800) 5200300 

Python 3.2 ha barrido su problema (no usar aritmética de enteros) debajo de su alfombra:

 Python 3.2 (r32:88445, Feb 20 2011, 21:29:02) [MSC v.1500 32 bit (Intel)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> 15511210043330985984000000 / (479001600 * 6227020800) 5200300.0 >>> repr(15511210043330985984000000 / (479001600 * 6227020800)) '5200300.0' >>> int(15511210043330985984000000 / (479001600 * 6227020800)) 5200300 Python 3.1.3 (r313:86834, Nov 27 2010, 18:30:53) [MSC v.1500 32 bit (Intel)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> 15511210043330985984000000 / (479001600 * 6227020800) 5200299.999999999 >>> repr(15511210043330985984000000 / (479001600 * 6227020800)) '5200299.999999999' >>> int(15511210043330985984000000 / (479001600 * 6227020800)) 5200299 

Estoy desconcertado: probablemente int() porque te diste cuenta de que estaba produciendo una respuesta float . ¿Por qué no dio el siguiente paso (obvio?) Para redondearlo, por ejemplo,

 [3.1.3] >>> int(round(15511210043330985984000000 / (479001600 * 6227020800))) 5200300 

?