Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1832 connectés 

  FORUM HardWare.fr
  Programmation
  C

  division entière -> SIGFPE, UB ?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

division entière -> SIGFPE, UB ?

n°1149481
Taz
bisounours-codeur
Posté le 13-07-2005 à 20:16:43  profilanswer
 

Ceci est un MP à Emmanuel Delahaye :
 

#include <stdlib.h>
#include <stdio.h>
 
int main(int argc, char **argv)
{
        unsigned long long x, y;
 
        if(argc != 3)
                return 1;
 
        x = strtoull(argv[1], NULL, 10);
        y = strtoull(argv[2], NULL, 10);
 
        printf("%llu / %llu == %llu\n", x, y, x / y);
 
        return 0;
}


 
Sur certaines architectures, dont i386, ./a.out 42 0 déclenche un SIGFPE. Sur i386, la division entière est simulée par mon compilateur (gcc -> __udivdi3). Je trouve pas de référence, mais ça me paraît bizarre de me prendre un SIGFPE en faisant du calcul entier : est-ce qu'avec des entiers, la / est UB si le diviseur est nul ?

mood
Publicité
Posté le 13-07-2005 à 20:16:43  profilanswer
 

n°1149484
Taz
bisounours-codeur
Posté le 13-07-2005 à 20:21:46  profilanswer
 

merde, c'est un UB ... je suis dans le caca jusqu'au coup ...
 
l'UB, c'est pas de la blague quand on dit que ça peut faire n'importe quoi, flamber la machine, envoyer des mails coquins à tout le carnet d'adresses ...

n°1149485
Taz
bisounours-codeur
Posté le 13-07-2005 à 20:23:10  profilanswer
 

et même pas en fait ... la définition de SIGFPE ANSI parle d'erreur arithmétique sans distinction flottant/entier ...

n°1149507
Emmanuel D​elahaye
C is a sharp tool
Posté le 13-07-2005 à 20:50:17  profilanswer
 

Taz a écrit :

Sur certaines architectures, dont i386, ./a.out 42 0 déclenche un SIGFPE. Sur i386, la division entière est simulée par mon compilateur (gcc -> __udivdi3). Je trouve pas de référence, mais ça me paraît bizarre de me prendre un SIGFPE en faisant du calcul entier : est-ce qu'avec des entiers, la / est UB si le diviseur est nul ?


Avec 1 0 :


PROJET1 a causé une erreur de division dans le module PROJET1.EXE à 017f:00403cbd.
Registres :
EAX=00000001 CS=017f EIP=00403cbd EFLGS=00010246
EBX=00000000 SS=0187 ESP=0073fd10 EBP=0073fd48
ECX=00000001 DS=0187 ESI=00000000 FS=6bbf
EDX=00000000 ES=0187 EDI=00000000 GS=0000
Octets à CS : EIP :
f7 f6 89 c6 89 f8 8b 55 dc f7 f6 89 45 d0 8b 45  
État de la pile :
00000039 00000000 bff7b9c5 81dccf2c 00000001 00000000 00000000 00000000 00000000 00000000 780251ca 00000000 00000000 00860540 0073fd78 00403c0d



---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  division entière -> SIGFPE, UB ?

 

Sujets relatifs
division d un float[C] Stocker une valeur entière dans un char * [Résolu]
séparer dizaine et unité d'une variable entierepour reccuperer le reste d'une division entiere
[SQL] Comment éviter une division par 0 (zéro) --> résolu par DECODE()Division de temps
rafraichir une page entiere apres une validation d'un form[Excel] Division par 10
Division sous DOS: résultat en nombre décimal 
Plus de sujets relatifs à : division entière -> SIGFPE, UB ?


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)