J'ai besoin de quelque chose pour contenir des valeurs cardinales naturelles. IE: un immense comptoir. Je pensais à mettre en œuvre un oword en utilisant une paire de longs primitifs. p>
Les débordements lanceraient une exception et non enveloppants. P>
Quel exemple Sourcecode / Blogs dois-je rechercher pour mettre en œuvre le fonctionnement de cette classe? strong> p>
Est-ce que quelqu'un sait une mise en œuvre actuelle 128B UINT pour Java? strong> p>
Je connais des Bigintegers, qui sont lents et immuables. Un 128B Uint a du sens ... p>
3 Réponses :
Pourquoi ne pas utiliser BigInteger? P>
BigInteger est lent i> Quand tout ce dont vous avez besoin n'est qu'un peu plus de 64 bits. Ran dans ce problème il y a un an et s'est avéré être 25 fois plus lent que l'original long. Voir cet anwer pour plus de détails: Parce que c'est la réponse acceptée, envisageant que l'OP a dit qu'il ne voulait pas de BigInteger.
Tim, votre commentaire contient un lien brisé.
J'utiliserais des entiers 32 bits comme représentation, car vous avez besoin d'un type plus grand (long) pour obtenir la précision supplémentaire pour le bit de transport, la détection et la multiplication de trop-plein. Pensez à un entier 32 bits en tant que chiffre et appliquez les algorithmes de l'école primaire. P>
Vous pouvez utiliser 64 bits Longs juste bien ==> deux fois plus vite. Une opération peut être déterminée par des modifications apportées au bit des signes.
@Ira Baxter je doute que ce serait plus rapide. Ce serait possible mais plus compliqué pour ajouter, mais pas pour la multiplication. Java BigInteger utilise Int [], et je suppose qu'ils savent ce qu'ils font.
Si vous souhaitez un forfait de plus haute performance, vous utilisez la plus grande wordsize disponible sur votre machine pour laquelle il existe un support d'instruction de machine natif. C'est difficile de trouver un PC ces jours-ci qui n'est pas 64 bits. Je me tiens à ma position: utilisez une longue. Les algorithmes du package de Bigint sont probablement typiques de la plupart des packages de multiplication; longtemps devrait tomber relativement facilement en place. Les ajouts de grandes grossistes prennent désormais une moitié autant de cycles. Les multiplications doivent être 4X aussi rapidement car vous n'avez besoin que de 1 produit au lieu de 4 produits croisés à moitié à large.
Je pourrais adoucir cela un peu: vous voulez que le plus grand ensemble de bits pour lesquels vous pouvez obtenir un produit de double précision à partir de deux multiples multiples de précision unique. Java Ints couners comme longs satisfaite cela de manière indépendante de Java, qui justifie votre réponse. Si vous avez besoin d'une vitesse, vous allez tomber dans le code de la machine natif. Sur le X86, l'unité FP offre un minimum de précision de 80 bits qui implique que vous souhaitiez choisir des "chiffres" 40 bits.
Ne me dis pas que vous envisagez d'avoir 128 setters statiques et getters, un pour chaque morceau ??? J'aurais définitivement aller pour SETBIT (INT Index, valeur booléenne) et GetBit (Int Index) en tant que méthodes d'instance. P>
Plus de choses dont vous avez besoin: une méthode de tostring () afin que vous puissiez obtenir une représentation lisible humaine (à un moment donné, vous voudrez imprimer les chiffres, je pense). P>
N'oubliez pas que tous les types ordinaux de Java sont signés (à l'exception de CHAR), donc si vous envisagez d'utiliser deux longs, gardez toujours à l'esprit que la partie inférieure pourrait être problématique pour détecter des débordements et tels que ... de toute façon ... , vous aurez un numéro de 127 bits sauf si la partie inférieure serait traitée comme un non signé de 63 bits. P>
Où l'OP a-t-il même allusion à des setters pour chaque morceau?
Stackoverflow.com/revisions/1096964/List Vous devez jeter un coup d'œil avant de critiquer.
Ok, maintenant je le vois. Je ne m'attendais pas à ce que je devais lire les révisions d'une question pour la comprendre; Cela semble un peu sur le dessus. J'ai signé votre réponse.
Ne pas le comprendre, mais ne vous attendez pas à ce que les gens reviennent pour modifier leurs réponses à chaque fois que la question soit mise à jour (entre autres parce que ce n'est pas notifié) ...
Mise en œuvre quelque chose de similaire il y a un an, et tout ce que je peux dire, c'est le cas: j'espère que vous n'aurez pas à mettre en œuvre un modulo / division précis ...;)
Vous pouvez attraper mutaablebiginteger de Openjdk DOCJAR.ORE/HTML/API/ Java / Math / MutableBiginteger.java.html