begin process at 2012 05 28 20:29:47
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Divers

 > 

Dépassement capacité multiplication integer


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Dépassement capacité multiplication integer

mardi 23 août 2005 à 18:54:17 | Dépassement capacité multiplication integer

bipcpp

Bonjour,

J'ai trois integer 64 bits :
_int64 i1,i2,i3;

Comment détecter le dépassement de capacité possible sur i3, lors d'une multiplication :
i3 = i1 * i2;

Merci.

mardi 23 août 2005 à 19:26:35 | Re : Dépassement capacité multiplication integer

cosmobob

salut,
si ca déborde, i3 aura la particularité d'etre inferieur à i1 ou à i2.

a+

mardi 23 août 2005 à 20:13:15 | Re : Dépassement capacité multiplication integer

Galmiza

Pourtant, en assembleur, il y a des flags qui changent d'états pour ce genre de chose.
Quand tu fais une opération et que le resultat vaut 0, est négatif ou depasse la memoire, des bits du flag prennent des valeurs spécifiques.
Mais comment lire ces flags, je ne sais pas.
Ils sont surtout utiles pour les optimisations de code.

mardi 23 août 2005 à 20:44:14 | Re : Dépassement capacité multiplication integer

BruNews

Administrateur CodeS-SourceS
Lire CF ici n'aurait pas de sens.
La mul sur 64 bits implique au mieux 1 mul SINON 3 mul et 2 add
Le flag sera positionné par le dernier add et donc ne voudrait rien dire.

ciao...
BruNews, MVP VC++
mardi 23 août 2005 à 20:45:58 | Re : Dépassement capacité multiplication integer

vecchio56

Administrateur CodeS-SourceS
Même en cas de débordement, on ne peut pas être sûr que i3 sera inférieur à i2 et i1 (par contre le contraire est sûr), a mon avis ca dépend de la manière dont le compilo implémente la multiplication sur 64 bits
mardi 23 août 2005 à 21:00:37 | Re : Dépassement capacité multiplication integer

BruNews

Administrateur CodeS-SourceS
cosmobob a bien dit inf à l'un OU l'autre.

ciao...
BruNews, MVP VC++
mardi 23 août 2005 à 21:06:16 | Re : Dépassement capacité multiplication integer

vecchio56

Administrateur CodeS-SourceS
et pourquoi il serait pas supérieur au 2?
mardi 23 août 2005 à 21:07:48 | Re : Dépassement capacité multiplication integer

BruNews

Administrateur CodeS-SourceS
Voila pour vecchio.
Galmiza > pas évident de dire quand overflow, sinon faut définir la règle du jeu.

    mov       eax, [esp+8]        ; HIDWORD(x)
    mov       ecx, [esp+16]       ; HIDWORD(y)
    or        ecx, eax
    mov       ecx, [esp+12]       ; LODWORD(y)
    jnz       short hard
    mov       eax, [esp+4]        ; LODWORD(x)
    mul       ecx
    jmp       short mulExit
hard:
    mul       ecx
    mov       [esp-4], eax        ; SAUVE RESULTAT INTERMEDIAIRE
    mov       eax, [esp+4]        ; LODWORD(x)
    mul       dword ptr[esp+16]   ; HIDWORD(y)
    add       [esp-4], eax
    mov       eax, [esp+4]        ; LODWORD(x)
    mul       ecx
    add       edx, [esp-4]
mulExit:
    ret       16

ciao...
BruNews, MVP VC++
mardi 23 août 2005 à 21:11:02 | Re : Dépassement capacité multiplication integer

BruNews

Administrateur CodeS-SourceS
vecchio, tu aurais un exemple de inférieur aux 2 ?

ciao...
BruNews, MVP VC++
mardi 23 août 2005 à 21:15:14 | Re : Dépassement capacité multiplication integer

vecchio56

Administrateur CodeS-SourceS
#include <iostream>

int main()
{
  unsigned __int64 a = 0xFFFFFFFFF, b = 0xFFFFFFFFF;
  unsigned __int64 r = a * b;
  if(r < a || r < b) std::cout << "débordement" << std::endl;
}

Cet exemple ne m'affiche pas "débordement"

1 2 3 4

Cette discussion est classée dans : integer, multiplication, dépassement, capacité, i3


Répondre à ce message

Sujets en rapport avec ce message

dépassement capacité d'un float et int [ par golum ] result=scanf("%f",&coef); if (result !=0 && coef !=0)Voila si j'entre un nombre délirant style 9999999999999999999999999999999999999999999999999999999 dépassement de capacité de la pile d'exécution [ par glipper ] Bonjour,j'ai crée une fonction comme ceci, qui mémorise les malloc effectués par un programme :void* _malloc(size_t n, int line, char* file){    void* slt [ par samira46 ] ça va,j'ai un problème et si tu veut aide moi stp pacek j'ai en retard, donc mon problème je veux récupérer les applications installé sur mon pc comme tri d'un tableau de chaines de caracteres [ par gabsia ] salut,le traitement c'est trier un tableau de chaines de caractères en ordre croissant :le critere de tri c'est la longueur de la chaine, si 2 chaines convertir vb en c [ par bosmal ] bonjour j'ai un petit programme en vb que j'aimerais convertir en c . pourriez vous m'aidez? (surtout ibwrt et ilwrti a remplacer par des sprintf je p Multiplication arabe en langage C [ par Stockalone1232 ] Bonjour tout le monde,Je suis débutant en langage C et je dois faire un programme de multiplication arabe de 2 grands nombres pour mon école. Si certa fatal error C1017: invalid integer constant expression [ par mar1985 ] Bonjour,s'il vous plaît j'ai besoin de votre aide.Ben je travaille sur Visual Studio 2005, lors de la compilation d'un projet je trouve l'erreur suiva Multiplication et addition [ par aqwali ] Prière, je veux un programme qui effectue l'addition et la multiplication de plusieurs nombres avec la plus grande taille, je travaille avec Dev-C++. somme et multiplication de tres grands nombres en c [ par sarah000c ] slt tt lmonde, je cherche un programme qui calcule la somme et la multiplication de tré grands nombres en language c ,veuillez m'aider c vraiment urge makes pointer from integer without a cast . . . [ par Crocandrew ] Bien le bonjour, je suis en train de réaliser mon projet de fin d'anée en C, et j'ai un petit probème en ce qui concerne la fonction strcpy !!A chaque


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 3,557 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales