Precision

thekozzy Messages postés 5 Date d'inscription dimanche 11 septembre 2005 Statut Membre Dernière intervention 29 mars 2007 - 2 janv. 2007 à 12:05
thekozzy Messages postés 5 Date d'inscription dimanche 11 septembre 2005 Statut Membre Dernière intervention 29 mars 2007 - 2 janv. 2007 à 23:56
Bonjour,
J'aimerai stocke un entier superieur a Long.MAX_VALUE. Mon probleme est que le type double m'arrondi et ne me garde que les 15 premier chiffre (logique pour une mantisse sur 52 bits). Mais serait-ce quand meme possible ?
Merci a tous, a bientot!

5 réponses

cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
2 janv. 2007 à 12:13
Avec les types standards ? Je ne pense pas, mais il est toujours possible de faire ta classe stockant ton nombre sur 2 long, ou plus, et d'implémenter les fonctions de calcul dessus.

Note : ca doit déjà exister dans des librairies annexes vu que ca existe dans d'autres langages.
0
thekozzy Messages postés 5 Date d'inscription dimanche 11 septembre 2005 Statut Membre Dernière intervention 29 mars 2007
2 janv. 2007 à 12:33
C'est une bonne idee, mais je suis toujours confronte au meme probleme.
En fait prenons un nombre X a 20 chiffre. Si je veux le traiter comme une somme de Y+Z je dois deja calculer X minus quelque chose que je stockerai dans Y et le reste dans Z.
Mais comment effectue cette simple soustraction, puisqu'il m'arrondi deja ce qu'il me stock...

Merciii beaucoup!
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
2 janv. 2007 à 12:48
c'est ce que je te dit : il faut redéfinir les fonctions de calcul sur ces nombres à grande précision !

Il ne faut pas faire Y+Z - X, mais plutôt :

X1 = Y - X1'
X2 = Z - X2'

autant pour une addition ou une soustraction, le calcul de X1' et X2' peut être assez simple (je pense) à trouver, autant pour la multiplication ou la division (ou autre opération encore plus complexe), ca risque d'être très compliqué !

Donc cherche plutôt des librairies mathématiques déjà faites, ce sera plus simple, car je suis quasi-sûr que ca existe déjà.
0
thekozzy Messages postés 5 Date d'inscription dimanche 11 septembre 2005 Statut Membre Dernière intervention 29 mars 2007
2 janv. 2007 à 12:48
Petit exemple :
double n = 9223372036854775807.0;
double n2 = 9223372036854000000.0;
double nb = n - n2 ;
System.out.println(nb);
System.out.println(nb + n2);
System.out.println( (nb+n2)%2);
Ceci produit comme affciahe un reste de 0... or le nombre n n'est evidemment pas divisible par 2...
Donc en fait si je traite mon nb comme deux long, quand je referai la somme pour qu'il me fasse éon "operation", je pense qu'il retronquera certainement...... mercii de votre aide!
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
thekozzy Messages postés 5 Date d'inscription dimanche 11 septembre 2005 Statut Membre Dernière intervention 29 mars 2007
2 janv. 2007 à 23:56
merci beaucoup pour l'idee, j'ai redefini les deux methodes (la divison et le modulo) dont j'avais besoin en traitant mes grand nombre comme des strings et sa marche impeccable ;)
0
Rejoignez-nous