Performace de BigDecimal vs BigInteger et BigDecimal
Je me demandais si l'utilisation de BigDecimal et BigInteger ou seulement BigDecimal me rendre la vie plus facile et moins de la conversion d'avant en arrière. Est-il un inconvénient à l'utilisation d'BigDecimal en ce qui concerne les ressources?
L'utiliser uniquement les types de données primitifs et BigInteger ou seulement BigInteger me rendre la vie plus facile et moins de la conversion d'avant en arrière?
Qu'est-ce exactement que vous essayez de faire?
Je suis en train de faire un tas de calculs entre les grands nombres et, en petit nombre, décimales et non des nombres décimaux.
Dans ce cas, utilisez BigDecimal. Rappelez-vous qu'il existe une surcharge à l'évolution constante des types trop...
Pourquoi ne pas utiliser uniquement les types de données primitifs et BigInteger ou seulement BigInteger me rendre la vie plus facile et moins de la conversion d'avant en arrière?
Dans le cas que vous avez seulement des nombres entiers, et que vous souhaitez uniquement les résultats en entiers (dans le champ numéro de sens), alors vous devriez utiliser BigInteger au lieu de BigDecimal. Pour effectuer l'arithmétique sur BigInteger, vous devez fournir BigIntegers, donc il n'y a pas grand chose à garder les valeurs de types primitifs, à moins que vous êtes vraiment en train de faire quelque chose d'autre avec eux avant le grand nombre de la partie.
Je suis en train de faire un tas de calculs entre les grands nombres et, en petit nombre, décimales et non des nombres décimaux.
Dans ce cas, utilisez BigDecimal. Rappelez-vous qu'il existe une surcharge à l'évolution constante des types trop...
Pourquoi ne pas utiliser uniquement les types de données primitifs et BigInteger ou seulement BigInteger me rendre la vie plus facile et moins de la conversion d'avant en arrière?
Dans le cas que vous avez seulement des nombres entiers, et que vous souhaitez uniquement les résultats en entiers (dans le champ numéro de sens), alors vous devriez utiliser BigInteger au lieu de BigDecimal. Pour effectuer l'arithmétique sur BigInteger, vous devez fournir BigIntegers, donc il n'y a pas grand chose à garder les valeurs de types primitifs, à moins que vous êtes vraiment en train de faire quelque chose d'autre avec eux avant le grand nombre de la partie.
OriginalL'auteur dalawh | 2013-04-06
Vous devez vous connecter pour publier un commentaire.
À partir de: http://www.javamex.com/tutorials/math/BigDecimal_BigInteger_performance.shtml
Noter qu'un BigDecimal est essentiellement un wrapper autour d'un BigInteger "se souvient où le point décimal est".
Raison de la façon dont nous sommes habitués à jongler avec les chiffres, en tant qu'humains, nous pourrions avoir à "penser un peu plus" dans le calcul avec des nombres non entiers à la main par rapport à des entiers (par exemple, on peut avoir appris le 7 tableau des temps par coeur pour accélérer certains calculs, mais probablement pas le .7 fois de table). Mais à un ordinateur de la mise en œuvre, il est essentiellement sans plus d'effort pour manipuler des nombres non entiers que des entiers, et donc, dans l'ensemble, les méthodes sur BigDecimal ont tendance à effectuer de la même manière analogue à des méthodes sur BigInteger.
Pourquoi ne pas utiliser uniquement les types de données primitifs et BigInteger ou seulement BigInteger me rendre la vie plus facile et moins de la conversion d'avant en arrière?
À partir de votre page: "Contrairement à l'addition et la soustraction, le temps nécessaire pour effectuer une multiplication des échelles de façon exponentielle avec le nombre de chiffres dans le multiplicands: ou plus précisément, la multiplication d'un nombre à n chiffres par un nombre à m chiffres prend dans l'ordre du nm de temps." Ce n'est pas ce "de façon exponentielle" signifie...
OriginalL'auteur prashant
Si vous êtes l'élaboration d'un faible temps de latence de l'application et chaque microseconde questions, BigDecimal/BigInteger n'est pas pour vous. En plus de ce fait BigDecimal/BigInteger n'a pas d'impact visible.
BigDecimal ne préforme inférieur
long
,double
. Même les pommes de BigInteger et de ses primitives.OriginalL'auteur Joban Dhillon
Je sais que le titre de votre question, les états "Performace de BigDecimal vs BigInteger et BigDecimal", mais l'une de vos questions que les états "Comment parler en utilisant uniquement des types de données primitifs et BigInteger ou seulement BigInteger à faire ". Eh bien, voici ce que je recommande:
Si vous avez besoin d'exactitude, de précision et vous avez un grand nombre de travailler avec de tels que d'énormes données financières alors il peut être préférable d'utiliser BigDecimal et BigInteger au lieu de types primitifs. Quelques autres caractéristiques de BigDecimal et BigInteger sont aussi:
Maintenant, revenons à votre question principale, en termes de performance, il n'y a pas beaucoup de différence en termes de performances entre les deux. Si vous pouvez présenter vos informations dans BigDecimal utiliser de sorte que vous n'avez pas à le convertir à BigInteger mais regardez à nouveau le programme et voir si il est logique d'utiliser uniquement BigDecimal tout le temps.
La principale différence entre les BigInteger et BigDecimal est que BigInteger prend en charge une précision arbitraire entiers et BigDecimal est pour une précision arbitraire fixe les nombres à virgule.
Voici mes sources et bonne chance 🙂
L'Université de NY
L'Université Du Colorado
OriginalL'auteur grepit
Si vous êtes inquiète beaucoup au sujet de la performance avec les grands nombres, je voudrais éviter de Java
BigInteger
etBigDecimal
comme la peste.À la fois l'utilisation lent (à la fois l'infini et raisonnablement petites entrées) algorithmes pour la multiplication, la division, et radix de conversion. Vous n'avez aucun moyen de les remplacer par des algorithmes plus efficaces si elle s'avère être un goulot d'étranglement, court de codage de votre propre
BigInteger
-compatible à gros chiffres et une grosse refactoriser.Vous êtes probablement beaucoup mieux à l'aide d'un Java wrapper autour de GMP et de MPFR si vous avez affaire à de grands nombres entiers. "Grand" ici peut-être un couple de centaines de chiffres en raison des choses, Java ne lorsque vous appelez des méthodes indigènes.
OriginalL'auteur tmyklebu