2017-03-10 5 views
1

J'ai un grand nombre entier ci-dessous, comme 'max'. Comment se fait-il que la valeur divisant max par '27' n'équivaut pas à omettre complètement le premier nombre '27'. Techniquement, ils devraient être égaux, mais en python ils ne le sont pas. Comment puis-je obtenir la même réponse en divisant la valeur maximale par '27', dans cet exemple?Comment obtenir la précision correcte avec une grande division entière en python

max = 27*37*47*30*17*6*20*17*21*43*5*49*49*50*20*42*45*1*22*44 
no27 = 37*47*30*17*6*20*17*21*43*5*49*49*50*20*42*45*1*22*44 
div27 = (max/27) 
modno27 = no27%40 
moddiv27 = div27%40 

Les valeurs imprimées sont:

no27 = 35882855955274315680000000 
div27 = 3.5882855955274316e+25 
modno27 = 0 
moddiv27 = 8.0 

Répondre

6

supposer que ce soit Python 3, vous avez utilisé vraie division, qui calcule float résultats, mais float (basé sur C double) a des limites de représentation que Python int de s ne pas (ci-dessus ~ 2**53, il ne peut pas représenter chaque valeur entière).

Lorsque vous connaissez le nombre est divisible de façon égale, utilisez // pour conserver int -ness. Si ce n'est pas divisible, vous arrondissez vers le bas, par ex. . Si cela est inacceptable, vous pouvez utiliser divmod pour calculer le quotient et le reste à la fois (donc aucune information n'est perdue) ou le type fractions.Fraction ou decimal.Decimal (avec une précision appropriée) pour obtenir des résultats plus précis dans un seul type de résultat.

+0

Merci, cela a beaucoup de sens. Merci pour l'explication approfondie de ce qui se passait. – user1179317