Boucle avec intégrale très / trop grande [Résolu]

Messages postés
96
Date d'inscription
mardi 14 avril 2009
Dernière intervention
2 juin 2016
- - Dernière réponse : babaOrhumette
Messages postés
96
Date d'inscription
mardi 14 avril 2009
Dernière intervention
2 juin 2016
- 26 mai 2010 à 21:44
Bonjour,
Je tiens à m'excuser par avance si le sujet n'est pas dans la bonne section.

Voilà j'ai une boucle à faire dans un programme :
for (int i = ****; i <  ; i++)
{
}


Seulement voilà mes **** représente un énorme nombre et du coup j'ai une erreur lors du débugage : "Constante intégrale trop grande".

Auriez-vous une solution à m'apporter ?
Merci beaucoup de votre aide et bonne journée à tous ceux qui me liront.

Baba.
Afficher la suite 

Votre réponse

19 réponses

Meilleure réponse
Messages postés
327
Date d'inscription
vendredi 23 décembre 2005
Dernière intervention
8 février 2011
3
Merci
Autrement en dotnet 4 il y a le type BigInteger.


---
Généralement le bug se situe entre le clavier et la chaise.
Le temps est une "chose" introuvable dont l'existence ne fait aucun doute.

Merci cs_GG29 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 104 internautes ce mois-ci

Commenter la réponse de cs_GG29
Messages postés
327
Date d'inscription
vendredi 23 décembre 2005
Dernière intervention
8 février 2011
3
Merci
Je viens d'essayer d'installer framework 4.0 mais il n'est pas reconnu par Visual c# Express 2008. :/

en effet il faut visual studio 2010

Autrement sur le site il y a des sources sur les grands nombres.

---
Généralement le bug se situe entre le clavier et la chaise.
Le temps est une "chose" introuvable dont l'existence ne fait aucun doute.

Merci cs_GG29 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 104 internautes ce mois-ci

Commenter la réponse de cs_GG29
Messages postés
327
Date d'inscription
vendredi 23 décembre 2005
Dernière intervention
8 février 2011
3
Merci
2 solutions
La première : utiliser les threads. En dotnet4 regarde du coté de la TPL (task parallel library)

la deuxième (pas top)
Ajouter Application.DoEvents() à chaque tour de boucle

---
Généralement le bug se situe entre le clavier et la chaise.
Le temps est une "chose" introuvable dont l'existence ne fait aucun doute.

Merci cs_GG29 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 104 internautes ce mois-ci

Commenter la réponse de cs_GG29
Messages postés
327
Date d'inscription
vendredi 23 décembre 2005
Dernière intervention
8 février 2011
3
Merci
BigInteger number1 = BigInteger.Parse("2A", NumberStyles.AllowHexSpecifier);
BigInteger number2 = BigInteger.Parse("2A", NumberStyles.AllowHexSpecifier);
BigInteger number3 = BigInteger.Parse("2A", NumberStyles.AllowHexSpecifier);

BigInteger result = BigInteger.Add(BigInteger.Add(number1, number2), number3);


---
Généralement le bug se situe entre le clavier et la chaise.
Le temps est une "chose" introuvable dont l'existence ne fait aucun doute.

Merci cs_GG29 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 104 internautes ce mois-ci

Commenter la réponse de cs_GG29
Messages postés
327
Date d'inscription
vendredi 23 décembre 2005
Dernière intervention
8 février 2011
0
Merci
essaye avec long à la place de int


---
Généralement le bug se situe entre le clavier et la chaise.
Le temps est une "chose" introuvable dont l'existence ne fait aucun doute.
Commenter la réponse de cs_GG29
Messages postés
96
Date d'inscription
mardi 14 avril 2009
Dernière intervention
2 juin 2016
0
Merci
Merci de cette réponse si rapide mais malheureusement j'ai la même erreur avec long soit : "Constante intégrale trop grande".

for (long i = 1; i < ***; i++)
            {}


Une autre idée peut-être ?

merci.
Commenter la réponse de babaOrhumette
Messages postés
327
Date d'inscription
vendredi 23 décembre 2005
Dernière intervention
8 février 2011
0
Merci
C'est quoi ton nombre ?


---
Généralement le bug se situe entre le clavier et la chaise.
Le temps est une "chose" introuvable dont l'existence ne fait aucun doute.
Commenter la réponse de cs_GG29
Messages postés
96
Date d'inscription
mardi 14 avril 2009
Dernière intervention
2 juin 2016
0
Merci
Attention : 25647891234567891234567891234567 en hexadécimal.
Commenter la réponse de babaOrhumette
Messages postés
96
Date d'inscription
mardi 14 avril 2009
Dernière intervention
2 juin 2016
0
Merci
Ou plus encore.
Commenter la réponse de babaOrhumette
Messages postés
382
Date d'inscription
samedi 22 janvier 2005
Dernière intervention
13 août 2011
0
Merci
salut

le nombre le plus grand que tu puisse utiliser est un ulong ( Entier 64 bits non signé )
qui va de 0 à 18446744073709551615

au dela tu peux faire comme cela :
double x = double.Parse("25647891234567891234567891234567");
for (double i = 0; i < x ; i++)
{
}


ca peut etre une idee ! a voir comment est recuperé ce nombre et si tu peux l'avoir en String
Commenter la réponse de yohan49
Messages postés
96
Date d'inscription
mardi 14 avril 2009
Dernière intervention
2 juin 2016
0
Merci
Merci à vous, je regarde à ça lors de ma pause de midi.
Je donnerai mon retour dans la foulée.
Commenter la réponse de babaOrhumette
Messages postés
96
Date d'inscription
mardi 14 avril 2009
Dernière intervention
2 juin 2016
0
Merci
Je viens d'essayer d'installer framework 4.0 mais il n'est pas reconnu par Visual c# Express 2008. :/
Commenter la réponse de babaOrhumette
Messages postés
96
Date d'inscription
mardi 14 avril 2009
Dernière intervention
2 juin 2016
0
Merci
Merci, ça a fonctionné avec BigInteger sur 4.0 sur Express 2010, merci beaucoup !!

Par contre, j'ai un nouveau problème : lorsque je lance ma boucle ci-dessous, la fenêtre de l'application "plante", pourtant le programme tourne toujours. De plus, je ne peux faire apparaitre sur une textbox où en est la boucle :

BigInteger b = new BigInteger(StrToByteArray("487412542561111125411879611111772"));
                      
             
                    for (int j = 1; j < b; j++)
                {
                   textBox1.Text = Convert.ToString(j);
                   

                }


Merci d'avance et bon week-end à vous.
Commenter la réponse de babaOrhumette
Messages postés
96
Date d'inscription
mardi 14 avril 2009
Dernière intervention
2 juin 2016
0
Merci
Que dire ?
Merci encore, c'est parfait.
Bonne nuit.

Sujet résolu sur tous les points.

Merci encore. :)
Commenter la réponse de babaOrhumette
Messages postés
96
Date d'inscription
mardi 14 avril 2009
Dernière intervention
2 juin 2016
0
Merci
Bonjour,

Je continue sur ce sujet car il s'agit de la continuation de mon petit programme maison et que cela à encore rapport avec de grand nombre hexadécimaux.

Voilà mon nouveau problème.
J'ai 3 nombres hexadécimaux :
string a = "1258785955455ffff4458855455ffff";
string b = "64964564eee46464eee44e9844e9464eeee";
string c = "eeeeee7744e4e5e45e4e54e54e54e54e5e454ee";

J'aimerai les additionner cela voilà : je ne peux passer par des BigInteger pour une addition (je ne me trompe pas ?) ni même par la méthode "habituelle" (mes nombres étant trop grands pour un int) à savoir :
int aa  = Convert.ToInt32(a, 16);
int bb = Convert.ToInt32(b, 16);
int cc = Convert.ToInt32(c, 16);
String resultat = Convert.ToString(a + b + c, 16);




Suis-je définitivement bloquée ?
Si non, auriez vous des solutions à m'apporter


Merci et bonne journée.
Commenter la réponse de babaOrhumette
Messages postés
327
Date d'inscription
vendredi 23 décembre 2005
Dernière intervention
8 février 2011
0
Merci
Tu peux utiliser les BigInteger une fois de plus. Pour avoir un BigInteger a partir de l'hexa :
http://msdn.microsoft.com/en-us/library/dd268285.aspx
Ensuite il y a une operation Add.
Si vraiment tu tiens à avoir le résultat en hexa tu appelles la méthode ToString avec les bons paramètres.


---
Généralement le bug se situe entre le clavier et la chaise.
Le temps est une "chose" introuvable dont l'existence ne fait aucun doute.
Commenter la réponse de cs_GG29
Messages postés
96
Date d'inscription
mardi 14 avril 2009
Dernière intervention
2 juin 2016
0
Merci
Merci de ta réponse.

J'ai regarder à ce que tu m'as indiqué.
Que le résultat soit en hexa ou en décimal m'importe peu, j'aurai même une préférence pour le décimal, mais j'en demande pas tant.

Pour comprendre un peu mieux je me suis limité à l'addition de 2 nombre plutôt que 3.
J'ai testé mais ça n'additionne pas :

BigInteger aaa = new BigInteger(aa);
BigInteger bbb = new BigInteger(bb);
BigInteger resultat = BigInteger.Add(aaa, bbb);

Avec :
- aa le byte[] de a
- bb le byte[] de b


J'avoue me perdre un peu... non j'avoue être larguée.
Commenter la réponse de babaOrhumette
Messages postés
96
Date d'inscription
mardi 14 avril 2009
Dernière intervention
2 juin 2016
0
Merci
Merci encore.
Je viens de tester et donnerai mon retour.
Commenter la réponse de babaOrhumette
Messages postés
96
Date d'inscription
mardi 14 avril 2009
Dernière intervention
2 juin 2016
0
Merci
J'ai essayé et effectivement ça fonctionne bien.
Un bémol cependant pour ffffffffffffffff qui donne -1, mais je pense qu'on y peut rien.*


Merci pour tout et bonne soirée.
Commenter la réponse de babaOrhumette

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.