C++ 128/256 bits taille fixe les types d'entiers
Je me demandais si un garçon AFIN de peut recommander un bon à la lumière de poids de taille fixe de type entier (128 bits ou même 256 bits, peut-être même modèle paramétrées) de la bibliothèque.
J'ai eu un coup d'oeil à GMP et co, ils excellent, mais un peu trop grand pour mes fins, je suis intéressé à en-tête simple seulement des solutions à ce point. La Performance est importante et l'architecture cible sera x86 et x86-64, également raisonnable de licence (aka rien GPL ou LGPL).
N'ai pas vu ces, mais il ne devrait pas être trop difficile d'écrire sur votre propre? (et en bonus, vous n'aurez pas de problèmes de licence)
Notant également cette question: stackoverflow.com/questions/1188939/...
Notant également cette question: stackoverflow.com/questions/1188939/...
OriginalL'auteur | 2011-03-09
Vous devez vous connecter pour publier un commentaire.
La
Boost
bibliothèque a des types de données dans le cadre demultiprecision
de la bibliothèque, pour les types allant de 128 à 1024 bits.OriginalL'auteur Tuxdude
La Xint bibliothèque est actuellement en cours de examen pour devenir une partie de Boost. Bien qu'il soit discuté plutôt controversé et le résultat de l'examen n'est pas encore clair, la bibliothèque répond à certaines de vos exigences:
L'un des points qui sont abordés au cours de l'examen de la performance est bien. Si elle est acceptée comme un officiel de la bibliothèque Boost, je m'attends à des problèmes de performances être résolu rapidement.
Donc, je voudrais faire un essai: Code, La Documentation.
OriginalL'auteur Sebastian
Natif de 128 bits types sont disponibles sur certaines plates-formes, vous avez tendance à être limité par l'architecture. Par exemple
__m128
est disponible pour SSE2?http://msdn.microsoft.com/en-us/library/ayeb3ayc.aspx
Également répertorié comme
__int128
dans cette ABI:http://www.x86-64.org/documentation/abi-0.99.pdf
Cependant le nom préféré de
uint128_t
etuint256_t
peut être trouvé dans SHOGUN, une "grande échelle d'apprentissage de la machine de boîte à outils, avec l'accent en particulier sur les Machines à Vecteur Support (SVM)"http://www.shogun-toolbox.org/doc/index.html
__m128i
est un panier-vecteur d'entiers éléments. SSE/AVX prend en charge les paniers entier add/sub avec des largeurs d'éléments de 8b à 64b, mais pas 128b. Bien sûr, les opérations booléennes sans effectuer entre bits (like ET/OU/XOR). Pour une précision arbitraire mathématiques, l'ESS n'est pas un carry vecteur de sorte qu'il est généralement plus rapide d'utiliser entieradd
/adc
que de pirater quelque chose avec l'ESS.OriginalL'auteur Steve-o
En fonction de vos besoins, la STL classe
bitset
peut s'adapter à vos besoins. Il répond à toutes les manipulation de bits les opérateurs que les types integer faire (<<
,|
etc.), mais, malheureusement, pas à des opérateurs arithmétiques comme+
ou*
. Sa taille est fixe au moment de la compilation via un paramètre du modèle. Un autre malheureux, c'est que l'API ne fournit aucun moyen pour arriver à la sous-jacentes représentation binaire (par exemple, pour la diffusion), ce qui pourrait sérieusement limiter son utilité.(Je sais c'est une vieille question, mais cette réponse pourrait aider les autres.)
OriginalL'auteur Nathaniel