Boucle avec intégrale très / trop grande

Résolu
babaOrhumette Messages postés 104 Date d'inscription mardi 14 avril 2009 Statut Membre Dernière intervention 7 avril 2019 - 20 mai 2010 à 14:00
babaOrhumette Messages postés 104 Date d'inscription mardi 14 avril 2009 Statut Membre Dernière intervention 7 avril 2019 - 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.

19 réponses

cs_GG29 Messages postés 326 Date d'inscription vendredi 23 décembre 2005 Statut Membre Dernière intervention 8 février 2011 17
21 mai 2010 à 08:48
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.
3
cs_GG29 Messages postés 326 Date d'inscription vendredi 23 décembre 2005 Statut Membre Dernière intervention 8 février 2011 17
21 mai 2010 à 13:49
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.
3
cs_GG29 Messages postés 326 Date d'inscription vendredi 23 décembre 2005 Statut Membre Dernière intervention 8 février 2011 17
21 mai 2010 à 22:16
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.
3
cs_GG29 Messages postés 326 Date d'inscription vendredi 23 décembre 2005 Statut Membre Dernière intervention 8 février 2011 17
26 mai 2010 à 15:49
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.
3

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

Posez votre question
cs_GG29 Messages postés 326 Date d'inscription vendredi 23 décembre 2005 Statut Membre Dernière intervention 8 février 2011 17
20 mai 2010 à 15:15
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.
0
babaOrhumette Messages postés 104 Date d'inscription mardi 14 avril 2009 Statut Membre Dernière intervention 7 avril 2019 1
20 mai 2010 à 17:08
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.
0
cs_GG29 Messages postés 326 Date d'inscription vendredi 23 décembre 2005 Statut Membre Dernière intervention 8 février 2011 17
20 mai 2010 à 18:28
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.
0
babaOrhumette Messages postés 104 Date d'inscription mardi 14 avril 2009 Statut Membre Dernière intervention 7 avril 2019 1
20 mai 2010 à 18:59
Attention : 25647891234567891234567891234567 en hexadécimal.
0
babaOrhumette Messages postés 104 Date d'inscription mardi 14 avril 2009 Statut Membre Dernière intervention 7 avril 2019 1
20 mai 2010 à 19:19
Ou plus encore.
0
yohan49 Messages postés 380 Date d'inscription samedi 22 janvier 2005 Statut Membre Dernière intervention 13 août 2011 7
21 mai 2010 à 02:02
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
0
babaOrhumette Messages postés 104 Date d'inscription mardi 14 avril 2009 Statut Membre Dernière intervention 7 avril 2019 1
21 mai 2010 à 08:57
Merci à vous, je regarde à ça lors de ma pause de midi.
Je donnerai mon retour dans la foulée.
0
babaOrhumette Messages postés 104 Date d'inscription mardi 14 avril 2009 Statut Membre Dernière intervention 7 avril 2019 1
21 mai 2010 à 13:45
Je viens d'essayer d'installer framework 4.0 mais il n'est pas reconnu par Visual c# Express 2008. :/
0
babaOrhumette Messages postés 104 Date d'inscription mardi 14 avril 2009 Statut Membre Dernière intervention 7 avril 2019 1
21 mai 2010 à 22:13
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.
0
babaOrhumette Messages postés 104 Date d'inscription mardi 14 avril 2009 Statut Membre Dernière intervention 7 avril 2019 1
21 mai 2010 à 22:29
Que dire ?
Merci encore, c'est parfait.
Bonne nuit.

Sujet résolu sur tous les points.

Merci encore. :)
0
babaOrhumette Messages postés 104 Date d'inscription mardi 14 avril 2009 Statut Membre Dernière intervention 7 avril 2019 1
26 mai 2010 à 14:15
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.
0
cs_GG29 Messages postés 326 Date d'inscription vendredi 23 décembre 2005 Statut Membre Dernière intervention 8 février 2011 17
26 mai 2010 à 14:25
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.
0
babaOrhumette Messages postés 104 Date d'inscription mardi 14 avril 2009 Statut Membre Dernière intervention 7 avril 2019 1
26 mai 2010 à 15:43
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.
0
babaOrhumette Messages postés 104 Date d'inscription mardi 14 avril 2009 Statut Membre Dernière intervention 7 avril 2019 1
26 mai 2010 à 16:14
Merci encore.
Je viens de tester et donnerai mon retour.
0
babaOrhumette Messages postés 104 Date d'inscription mardi 14 avril 2009 Statut Membre Dernière intervention 7 avril 2019 1
26 mai 2010 à 21:44
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.
0
Rejoignez-nous