Est-ce qu'une norme spécifie quelle devrait être la sortie?Quel est le résultat de la fusion de float + INF, -INF et NAN en entier dans C?
Par exemple, ce code:
#include <stdio.h>
#include <math.h>
int main(int argc, char** argv) {
float a = INFINITY;
float b = -INFINITY;
float c = NAN;
printf("float %f %f %f\n", a, b, c);
printf("int %d %d %d\n", (int) a, (int) b, (int) c);
printf("uint %u %u %u\n", (unsigned int) a, (unsigned int) b, (unsigned int) c);
printf("lint %ld %ld %ld\n", (long int) a, (long int) b, (long int) b);
printf("luint %lu %lu %lu\n", (unsigned long int) a, (unsigned long int) b, (unsigned long int) c);
return 0;
}
Compilé sur la version gcc 4.2.1 (Apple Inc. construire 5664) Cible: i686-pomme-darwin10
Sorties:
$ gcc test.c && ./a.out
float inf -inf nan
int -2147483648 -2147483648 -2147483648
uint 0 0 0
lint -9223372036854775808 -9223372036854775808 -9223372036854775808
luint 0 9223372036854775808 9223372036854775808
Ce qui est assez bizarre. (int) + inf < 0!?!
C'est un comportement indéfini - quoi d'autre * pourrait-il être? –
WIWO: bizarre, bizarre. –
En Java, les infinis sont convertis à la valeur la plus proche (MAX_VALUE ou MIN_VALUE) et NaN est converti en 0. – starblue