format d' entiers ? [c] - Programmation
Marsh Posté le 23-11-2001 à 15:01:03
Godbout a écrit a écrit : long tout court ?? |
pas mieux !!!
D'apres mon bouquin, le type long peut aller jusqu'a 2 100 000 000
Moi, j'aimerais aller a un nombre avec plus de 17 chiffres!!
C'est faisable ou pas du tout ???
Marsh Posté le 23-11-2001 à 15:06:48
j'ai eu le meme genre de pb l'autre jour, ca m'a parru assez special d'etre limite comme ca !
Marsh Posté le 23-11-2001 à 15:15:22
slt,
t'es limité a 9 chiffres de 0 a 999 999 999, pour faire des calculs en format 32 bits sinon il te faut du 64 bits. Dans ce cas tu passes en format double float (64 bits) ou long double (80 bits)
Marsh Posté le 23-11-2001 à 15:18:17
mario51 a écrit a écrit : Comment faire pour saisir dans un int, un entier qui fais plus de 17 chiffres??? J'ai essaye long int , mais ca marche pas non plus! D'avance merci! |
Avec gcc tu as 1 type "long long" qui fait 64 bits
Marsh Posté le 23-11-2001 à 15:22:06
Pour le stocker, ça peut aller dans une chaîne de caractères . Le problème est ensuite de faire des calculs dessus...
Marsh Posté le 23-11-2001 à 15:33:45
moi je vois que la feinte de stocker ds une chaines de carac et de redefinir toutes les opérations , ( addition , multi , sous ...)
Marsh Posté le 23-11-2001 à 15:44:09
Quelqu'un voulait faire du codage sur 80 (100, ou plus, sais plus) caractères une fois. Faut redéfinir les opérations chiffre par chiffre comme on fait naturellement sur le papier. Tout dépend du but.
Si c'est juste du stockage, une chaîne, c'est pas mal...
Marsh Posté le 23-11-2001 à 16:12:20
Si je me rapelle bien, on a fait une classe pour faire ca en C++ quand j'etais en deuxième année de mon shti graduat :-)
Tu dois pouvoir trouver une classe qui fait plus ou moins ce que tu veux sur http://esiweb.nexen.net, mais sinon y a pleins de classes qui le font je parie... Mais je te dis pas la lenteur du truc!
Marsh Posté le 23-11-2001 à 18:46:12
barbarella a écrit a écrit : slt, t'es limité a 9 chiffres de 0 a 999 999 999, pour faire des calculs en format 32 bits sinon il te faut du 64 bits. Dans ce cas tu passes en format double float (64 bits) ou long double (80 bits) |
Et la marmotte.....
Sur 32 bits avec des entiers non-signé tu peux aler jusqu'à 4294967296 (2^32) et pas 999 999 999
T au courant que les PC utilise le binaire et pas une base 10 ???
Marsh Posté le 23-11-2001 à 18:52:41
[SDF]Poire a écrit a écrit : Et la marmotte..... Sur 32 bits avec des entiers non-signé tu peux aler jusqu'à 4294967296 (2^32) et pas 999 999 999 T au courant que les PC utilise le binaire et pas une base 10 ??? |
T'as oublié le 0 !
donc le max c'est 2^32 - 1 = 4294967295
Marsh Posté le 23-11-2001 à 19:14:08
*Syl* a écrit a écrit : T'as oublié le 0 ! donc le max c'est 2^32 - 1 = 4294967295 |
ok excuse 2^32 possibilités
Marsh Posté le 23-11-2001 à 19:48:12
[SDF]Poire a écrit a écrit : ok excuse 2^32 possibilités |
Enfin..c'était déjà mieux que 999 999 999
Marsh Posté le 23-11-2001 à 19:52:02
*Syl* a écrit a écrit : Enfin..c'était déjà mieux que 999 999 999 |
Oui
Marsh Posté le 23-11-2001 à 20:43:15
Shortint ?128..127 signed 8-bit
Smallint ?32768..32767 signed 16-bit
Longint ?2147483648..2147483647 signed 32-bit
Int64 ?2^63..2^63?1 signed 64-bit
Byte 0..255 unsigned 8-bit
Word 0..65535 unsigned 16-bit
Longword 0..4294967295 unsigned 32-bit
Au fait, y a les int64 en delphi/builder... 2^63 (c du signé) ca te suffit pas?
Marsh Posté le 23-11-2001 à 23:06:02
buitoni a écrit a écrit : Si je me rapelle bien, on a fait une classe pour faire ca en C++ quand j'etais en deuxième année de mon shti graduat :-) Tu dois pouvoir trouver une classe qui fait plus ou moins ce que tu veux sur http://esiweb.nexen.net, mais sinon y a pleins de classes qui le font je parie... Mais je te dis pas la lenteur du truc! |
ceux qui étaient lents c'était ceux qui pour une multiplication faisaient X additions.
le mien il était super rapide, j'avais refait l'équivalent des multiplications écrites.
Quand je pense que je m'étais fait chier pendant 1 semaine pour ça, et qu'après le prof il testait avec des nombres de moins de 5 chiffres
j'aurais foutu des long int au lieu de faire des classes avec operateurs et tout il n'y aurait vu que du feu.
enfin ça m'avait bien fait plaisir de voir que mon prog pour qques centaines de chiffres dans une multiplication il ne mettait que qques secondes, alors que certains autres élèves c'était qques minutes
[edtdd]--Message édité par antp--[/edtdd]
Marsh Posté le 23-11-2001 à 23:13:11
Pareil, j'ai aussi fait la multiplication ecrite, ca décoiffait!
Et pour la division, tu avais fait comment?
Moi je faisais une approche en multipliant des chiffres, c'etait aussi quasi instantané alors que ca prenait un temps fou chez les autres
Marsh Posté le 23-11-2001 à 23:15:53
moi j'avais fait un truc dans le style des divisions écrites.
c'était assez rapide aussi.
enfait les 4 opérations je les avait faites comme les calculs écrits de mon enfance
Marsh Posté le 23-11-2001 à 23:51:26
[SDF]Poire,
t'as pas lu correctement. j'ai fait très atttention de préciser pour le calcul, mais apparement ça suffit pas. Si tu te bases sur 10 chiffres comment tu fais pour additionner 2 nombres en étant sur de ne pas avoir de dépassmeent de capacité ? Ben tu peux pas donc tu dois te limité a un truc du genre 2^30, mais t'utilise ni 2^31 ni 2^32 en unsigned.
Marsh Posté le 24-11-2001 à 00:33:08
barbarella a écrit a écrit : [SDF]Poire, t'as pas lu correctement. j'ai fait très atttention de préciser pour le calcul, mais apparement ça suffit pas. Si tu te bases sur 10 chiffres comment tu fais pour additionner 2 nombres en étant sur de ne pas avoir de dépassmeent de capacité ? Ben tu peux pas donc tu dois te limité a un truc du genre 2^30, mais t'utilise ni 2^31 ni 2^32 en unsigned. |
Ta tentative de ratrapage est incompréhensible....
Marsh Posté le 24-11-2001 à 00:51:36
mais,
je t'en prie, ponds nous un prog permetttant de saisir A et B (des nombres de 10 chiffres) pour executer un calcul (c'est de ça que je parle) tel que (par exemple) A+B = C avec A,B, C soient codés sur 1 seul long (unsigned ou non). Evidement on parle de base 10.
Nous serons tous ravis de prendre connaissance d'un algo qui n'existe pas encore
[edtdd]--Message édité par Barbarella--[/edtdd]
Marsh Posté le 24-11-2001 à 00:58:24
ah j'oubliais,
ma remarque a ta dernière remarque
"Ta tentative de ratrapage est incompréhensible.... "
c'est vrai je suis réputé pour écrire de façon a ne pas me faire comprendre des autres
Marsh Posté le 24-11-2001 à 00:59:56
Barbarella a écrit a écrit : mais, je t'en prie, ponds nous un prog permetttant de saisir A et B (des nombres de 10 chiffres) pour executer un calcul (c'est de ça que je parle) tel que (par exemple) A+B = C avec A,B, C soient codés sur 1 seul long (unsigned ou non). Evidement on parle de base 10. Nous serons tous ravis de prendre connaissance d'un algo qui n'existe pas encore |
Buitoni tu me dis si je dis une connerie....
Avec des int codés sur 32 ou 64 bits tu peux faire quand même un paquet de calcul sur 10 chiffres...... (surtout avec les int sur 64 bits.....)
Marsh Posté le 24-11-2001 à 01:02:08
En entier c'est limite quand même... 9.5 chiffres je dirais :-)
Mais en int64 oui, tu peux y aller a l'aise quand meme!
Marsh Posté le 24-11-2001 à 01:03:44
buitoni a écrit a écrit : En entier c'est limite quand même... 9.5 chiffres je dirais :-) Mais en int64 oui, tu peux y aller a l'aise quand meme! |
Merci je commençais à avoir des doutes.....
Marsh Posté le 24-11-2001 à 01:04:13
allons poire,
soit pas modeste fais le nous ton algo a 10 chiffres avec des int 32 bits. puis demande pas d'aide, tu baisses dans mon estime
[edtdd]--Message édité par Barbarella--[/edtdd]
Marsh Posté le 24-11-2001 à 01:07:09
Barbarella a écrit a écrit : allons poire, soit pas modeste fait le nous ton algo a 10 chiffres avec des int 32 bits. puis demande pas d'aide, tu baisses dans mon estime |
G pas demandé d'aide.... G demandé une surveillance de mes propos
32 bits en unsigned t'as quand même un peu de marge (pas beaucoups ok mais un peu)
Avec du 64 bits C ok
Tu m'expliqueras T 999 999 999 un jour ok ????
Marsh Posté le 24-11-2001 à 01:11:51
Décidement,
En codage 32 bits, comment veux-tu entrer un nombre de 2^33 qui est un nombre de 10 chiffres, tu peux pas. Comment veux-tu additionner 2^32-1 + 2^32-1, tu ne peux pas. Donc si tu veux faire une fonction générale de saisie et de calcul sur des nombres entier et qu'ils soient codés sur 32 bits ben t'es obligé de les limité a un 99999999.
[edtdd]--Message édité par Barbarella--[/edtdd]
Marsh Posté le 24-11-2001 à 01:12:26
Barbarella a voulu arrondir à la puissance de 10 inférieure.
Si tu dois coder des grands nombres en base 10 sur plusieurs "int" 32 bits, une solution simple est de les réprésenter par tranche de 9 chiffres (donc de 0 à 999999999)
Marsh Posté le 24-11-2001 à 01:17:08
Barbarella a écrit a écrit : Décidement, En codage 32 bits, comment veux-tu entrer un nombre de 2^33 qui est un nombre de 10 chiffres, tu peux pas. Comment veux-tu additionner 2^32-1 + 2^32-1, tu ne peux pas. Donc si tu veux faire une fonction générale de saisie et de calcul sur des nombres entier et qu'ils soient codés sur 32 bits ben t'es obligé de les limité a un 99999999. |
C un peu + compliqué que ça......
999 999 999 * 999 999 999 = 9.999999...*10^17 Tu le cole comment dans un 32 bits ????
Ton truc C juste bon pour les additions (et même pas car tu peux aler un peu + loin que 999 999 999)
(buitoni si je dis une connerie.....)
[edtdd]--Message édité par [SDF]Poire--[/edtdd]
Marsh Posté le 24-11-2001 à 01:19:31
Pour illustrer le propos de verdoux voila une addition issu d'une biblio de grand nombre
void add00(tip *e,tip *e1,tip *e2)
{
tip a,
b;
// on affecte pas directement à till pour plus de souplesse
a = *e1;
RETENU = 0;
while((a--) > 0L)
{
b = *(++e1) + *(++e2) + RETENU;
*(++e) = b & 0x3FFFFFFF;
RETENU = (b & 0x40000000) && 1L;
}
}
[edtdd]--Message édité par Barbarella--[/edtdd]
Marsh Posté le 24-11-2001 à 01:21:21
999 999 999 * 999 999 999 = 9.999999...*10^17 Tu le cole comment dans un 32 bits ????
Ben justement tu ne peux pas, c'est ça mon propos. Bon je vous laisse avec le winner de service
Marsh Posté le 24-11-2001 à 01:24:06
Barbarella a écrit a écrit : 999 999 999 * 999 999 999 = 9.999999...*10^17 Tu le cole comment dans un 32 bits ???? Ben justement tu ne peux pas, c'est ça mon propos. Bon je vous laisse avec le winner de service |
Ex : 1073741824 + 1073741823 C codable sur un 32bits signé
Alors le 999 999 999 ?
Marsh Posté le 24-11-2001 à 01:28:49
Bon le winner va arréter là car on tombe dans du chipotage de m****....
De toute façon il y aura tjs moyen de faire un débordement....
[edtdd]--Message édité par [SDF]Poire--[/edtdd]
Marsh Posté le 24-11-2001 à 01:44:30
les int dépendent de la machine 16 ou 32 bits, voire 64 dans certains cas.
Long c'est 32 bits.
Marsh Posté le 24-11-2001 à 01:56:32
Barbarella a écrit a écrit : Décidement, En codage 32 bits, comment veux-tu entrer un nombre de 2^33 qui est un nombre de 10 chiffres, tu peux pas. Comment veux-tu additionner 2^32-1 + 2^32-1, tu ne peux pas. Donc si tu veux faire une fonction générale de saisie et de calcul sur des nombres entier et qu'ils soient codés sur 32 bits ben t'es obligé de les limité a un 99999999. |
Ehoh, ca tiens sur 10 chiffres un entier non signé sur 32 bits!
mais le chiffre le plus significatif doit etre inférieur à 5!
Marsh Posté le 24-11-2001 à 01:58:13
Fodger a écrit a écrit : les int dépendent de la machine 16 ou 32 bits, voire 64 dans certains cas. Long c'est 32 bits. |
Houla, t'es pas sorti de l'auberge toi... Avec un vrai compilateur c'est oublié depuis des années ce coup la hein... Ca existait sur les vieux compilateur C++ de Borland mais maintenant tu peux oublier ca hein :-)
En delphi on utilise le Cardinal, c'est un entier non signé, dont la valeur maximale est citée plus haut... (sur 10 chiffres! 4.xxx.xxx.xxx)
Marsh Posté le 24-11-2001 à 09:06:22
Bon j'avais dit que je dirais + rien mais je vais quand même apporté une petite précision....
Barbarella pour que tu sois sur que ton résultat de calcul (à 2 nombres) tienne dans un 32bits non-signé il faut que T 2 1er nombre soit codé sur 16bits non signé (ex : 65535*65535=4294836225 mais 65600*65600 = 4303360000->pas codable sur 32bits....)
[edtdd]--Message édité par [SDF]Poire--[/edtdd]
Marsh Posté le 24-11-2001 à 09:40:42
buitoni a écrit a écrit : Ehoh, ca tiens sur 10 chiffres un entier non signé sur 32 bits! mais le chiffre le plus significatif doit etre inférieur à 5! |
Petite précision : Cette condition est necessaire mais pas suffisante il faut que l'entier non signé sur 10 chiffres soit < 2^32 - 1 pour être codé sur 32bits non-signé
[edtdd]--Message édité par [SDF]Poire--[/edtdd]
Marsh Posté le 23-11-2001 à 14:52:06
Comment faire pour saisir dans un int, un entier qui fais plus de 17 chiffres???
J'ai essaye long int , mais ca marche pas non plus!
D'avance merci!