Je voudrais représenter une valeur 64 bits signé long
, tels que les valeurs supérieures à (2**63)-1 sont représentés comme négatif, cependant Python long
a une précision infinie. Est-il un 'rapide' façon pour moi de réaliser cet objectif?
OriginalL'auteur st9 | 2009-11-19
Vous pouvez utiliser
ctypes.c_longlong
:C'est vraiment seulement une option si vous êtes sûr qu'un
signed long long
64 bits de large sur la machine cible(s).Edit: jorendorff l'idée de de la définition d'une classe pour la version 64 bits est attrayant. Idéalement, vous voulez minimiser le nombre de explicite de la classe créations.
À l'aide de
c_longlong
, vous pourriez faire quelque chose comme ceci (remarque: Python 3.x seulement!):De cette façon, le résultat de
ll(2 ** 63) - 1
sera en effet9223372036854775807
. Cette construction peut entraîner une dégradation de la performance, donc en fonction de ce que vous voulez faire exactement, la définition d'une classe, par exemple comme ci-dessus peuvent ne pas être en vaut la peine. En cas de doute, utiliseztimeit
.OriginalL'auteur Stephan202
Pouvez-vous utiliser numpy? Il a un int64 type qui fait exactement ce que vous voulez.
C'est transparent pour les utilisateurs, à la différence de la ctypes exemple, et c'est codé en C donc ça va être plus vite que le roulement de votre propre classe en Python. Numpy peut être plus grand que les autres solutions, mais si vous êtes en train de faire l'analyse numérique, vous apprécierez avoir.
OriginalL'auteur AFoglia
La chose la plus rapide est sans doute pour tronquer le résultat à 64 bits vous-même:
Bien sûr, vous pouvez définir votre propre type numérique est automatiquement chaque fois que vous faites toute sorte d'opération arithmétique:
mais qui n'est pas particulièrement rapide à mettre en œuvre.
OriginalL'auteur Jason Orendorff
Avoir un regard sur le module ctypes, il est utilisé pour appeler l'étranger Dll/bibliothèques de python.
Il y a certains types de données qui correspondent à des types C, par exemple
OriginalL'auteur Steffen