2017-07-31 7 views
-1

En PythonDivision int Python (1000000000000000000/3) = 333333333333333312

int (1000000000000000000/3)=333333333333333312 

Mais il devrait être:

int (1000000000000000000/3)=333333333333333333 

Je suis nouveau à python.

+1

Votre réponse « vrai » est une approximation (vous arrondir le résultat au sol avec un casting int) et ainsi est celui que génère Python: c'est juste que ton approximation est plus proche. Je crains que cela ne vienne avec le territoire (c'est-à-dire le calcul fini de l'approximation des réels). Si vous avez besoin d'une plus grande précision que les ressources standard vous le permettent, vous devez utiliser une bibliothèque spécialisée dans l'environnement linguistique que vous utilisez. – adrianmcmenamin

+2

@adrianmcmenamin: Votre explication est quelque peu trompeuse, l'erreur d'arrondi n'est pas créée par la distribution int, mais par la division en virgule flottante. La fonction 'int' de Python est une implémentation précise de l'opération" tronquer vers zéro "pour les nombres à virgule flottante, mais elle ne supprime pas les erreurs d'arrondi qui étaient déjà présentes dans son argument. –

+0

Je n'ai pas dit que l'erreur d'arrondi était due à la distribution. Je fais simplement remarquer que l'OP a cherché une approximation et a malheureusement obtenu un résultat plus mauvais qui l'attendait - mais chaque approximation comporte le risque d'erreur et une précision arbitraire nécessitera probablement des bibliothèques spéciales. – adrianmcmenamin

Répondre

2

Vous devez appliquer la division sol // pour obtenir ce résultat à python3 comme ci-dessous:

In [1]: 1000000000000000000//3 
Out[1]: 333333333333333333 
+0

Bien sûr, vous n'avez même pas besoin de conversion explicite en un entier avec 'int' dans ce cas, parce que le résultat d'une division de plancher est déjà un entier. –

+1

@ Rörd désolé j'ai oublié de le retirer tout en le vérifiant à travers python2. merci de signaler – Gahan

+0

Y at-il une explication pour: int (1000000000000000000/3) = 333333333333333312 pourquoi il donne ce résultat? –