Quelqu'un sait il comment renvoyer l'entier le plus proche d'un nombre à virgule à l'aide de fonctions de base en C?
Merci.
Quelqu'un sait il comment renvoyer l'entier le plus proche d'un nombre à virgule à l'aide de fonctions de base en C?
Merci.
Ce n'est pas indiqué dans une FAQ cela ? Ou dans le forum![]()
ceil()
Non ceil(x) prend le plus petit entier supérieur ou égal à x
Envoyé par FAQ
Compil your life guy!
The Aures Project
Surement pas. Appliqué à -3,2 on obtient -2 au lieu de -3.Envoyé par Goundy
Soit on ajoute 0,5 et on prend la partie entière (au sens mathématiques) avec la fonction floor, soit on se tourne vers des fonctions comme nearbyint et rint (non conforme Iso C9X).
--
SaintAmand
Hum, choisi ton camp camarade. C'est soit C9x soit ISO-C99.Envoyé par SaintAmand
http://emmanuel-delahaye.developpez.com/notes.htm#norme
Envoyé par petdelascar
http://c.developpez.com/faq/c/?page=..._round_correct
Cette fonction semble se comporter correctement.
Petit exemple de test unitaire :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61 #include <math.h> double Arrondit(const double x) { if (0<=x) { return floor(x+0.5); } else { return ceil(x-0.5); } } #include <float.h> #define N(a) (sizeof(a)/sizeof*(a)) int main (void) { struct test { unsigned long test; double in; long out; } a[]= { {10, 0.0 ,0}, {11, 1.0 ,1}, {12, 1.5 - DBL_EPSILON ,1}, {13, 1.5 ,2}, {20, -0.0 ,0}, {21, -1.0 ,-1}, {22, -1.5 + DBL_EPSILON ,-1}, {23, -1.5 ,-2}, }; size_t i; int err = 0; for (i = 0; i < N(a) && !err; i++) { struct test const *p = a + i; double n = Arrondit (p->in); if (n != p->out) { printf ("err at test %lu\n", p->test); err = 1; } } if (!err) { puts ("\nP A S S E D\n"); } return 0; }
J'ajoute une petite macro toute simple qui fait le travail très bien:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2#define nint( x ) (x>0.0?(int)(x+0.5):(int)(x-0.5))
Partager