double vs long de la sérialisation en java
Je peux stocker un nombre aussi une Longue et Double dans HBase. Deux d'entre eux prend 8 octets en Java.
Avantage de l'Utilisation de Double, c'est qu'il donne une plus large gamme pour ranger les Nombres Entiers.
Cependant, je pense que la plage de Long est également suffisant pour mon utilisation.
Quelqu'un a une idée sur la sérialisation et la désérialisation des performances de Longue vs Dobule? Je suis intéressé par comparaison entre eux.
Grâce.
long
et double
ou Long
et Double
et quel type de sérialisation parlez-vous?OriginalL'auteur Anil Gupta | 2012-10-02
Vous devez vous connecter pour publier un commentaire.
Si vous êtes le stockage des entiers, utilisez
Long
. Votre relevé que "Avantage de l'Utilisation de Double, c'est qu'il donne une plus large gamme pour ranger les Nombres Entiers" est incorrect. Les deux sont 64 bits, maisdouble
a utiliser certains bits pour l'exposant, laissant de moins en moins de bits pour représenter l'ampleur. Vous pouvez stocker un plus grand nombre dans undouble
, mais vous perdrez en précision.En d'autres termes, pour les nombres plus grands que certains à la limite supérieure, vous ne pouvez plus magasin d'à côté "nombres entiers"... étant donné un entier de valeur au-dessus de ce seuil, le "prochain" possible
double
plus de 1 plus grand que le précédent numéro.Par exemple
Ce sorties:
Noter que
Une autre façon de le dire est que
long
ont un peu moins de 19 chiffres de précision, tandis quedouble
n'en a que 16 chiffres de précision. Double peut stocker des nombres de plus de 16 chiffres, mais au prix de la troncature et arrondi dans le bas de chiffres.Si vous avez besoin de plus de 19 chiffres de précision, vous devez recourir à
BigInteger
, avec la baisse attendue de la performance.Oui, je vais stocker des entiers(nombres entiers). Pouvez-vous me dire comment aurais-je une perte de précision si je stocker un nombre entier en Double? Valeur Max de Double est: 17976931348623157000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.0 valeur Max de Long est: 9223372036854775807
Je suis incapable de le comprendre "pour les nombres plus grands que certains à la limite supérieure, vous ne pouvez plus magasin d'à côté "nombres entiers"... étant donné un entier de valeur au-dessus de ce seuil, le "prochain" double sera plus que de 1 de plus que le numéro précédent." Pouvez-vous expliquer cela? Problèmes avec de Longs, c'est qu'il ne peut avoir de 19 chiffres et à l'avenir je peut avoir un certain nombre, avec plus de 19 chiffres.
J'ai mis à jour ma réponse avec un exemple
C'est pourquoi vous ne devez JAMAIS utiliser la virgule flottante pour les calculs financiers.
OriginalL'auteur Jim Garrison
Cela ressemble à un mauvais combat:
De la Java Tutoriel
C'est à peu près de 19 chiffres significatifs
De Wikipédia
Donc, en dépit de son apparente "supériorité" Double va vous servir de pire que de Long. Et je suis épiloguer ici, mais intuitivement, je dirais que la sérialisation/désérialisation de la virgule flottante types sont plus coûteuses opérations que les mêmes opérations sur l'intégrale des types de données, mais même si il y a des différences qu'il sera assez faible sur les systèmes modernes.
Donc, lorsque l'on travaille avec des entiers, bâton Long.
OriginalL'auteur fvu
Sans le savoir précisément, j'imagine que c'est à la fois un
long
et undouble
ont la même sérialisation: prendre le bus 64 bits et de les mettre sur le fil. De même, j'imagine que la désérialisation est juste une question de prendre 64 bits de désactiver le câble et déclarant qu'ils représentent maintenant unelong
oudouble
. Tout 64 bits vont représenter un validelong
oudouble
(mais pas tous les représentera une durée double), donc il n'y a pas de validation, ou du travail supplémentaire.OriginalL'auteur yshavit