division entière -> SIGFPE, UB ? - C - Programmation
Marsh Posté le 13-07-2005 à 20:21:46
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 ...
Marsh Posté le 13-07-2005 à 20:23:10
et même pas en fait ... la définition de SIGFPE ANSI parle d'erreur arithmétique sans distinction flottant/entier ...
Marsh Posté le 13-07-2005 à 20:50:17
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 :
|
Marsh Posté le 13-07-2005 à 20:16:43
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 ?