logb, logbf, logbl
|
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Défini dans l'en-tête
<math.h>
|
||
|
float
logbf
(
float
arg
)
;
|
(1) | (depuis C99) |
|
double
logb
(
double
arg
)
;
|
(2) | (depuis C99) |
|
long
double
logbl
(
long
double
arg
)
;
|
(3) | (depuis C99) |
|
Défini dans l'en-tête
<tgmath.h>
|
||
|
#define logb( arg )
|
(4) | (depuis C99) |
logbl
est appelé. Sinon, si
arg
a un type entier ou le type
double
,
logb
est appelé. Sinon,
logbf
est appelé.
Formellement, l'exposant non biaisé est la partie entière signée de
log
r
|arg|
(retournée par cette fonction comme valeur flottante), pour un
arg
non nul, où
r
est
FLT_RADIX
. Si
arg
est sous-normal, il est traité comme s'il était normalisé.
Table des matières |
Paramètres
| arg | - | valeur à virgule flottante |
Valeur de retour
Si aucune erreur ne se produit, l'exposant non biaisé de arg est renvoyé comme une valeur flottante signée.
Si une erreur de domaine se produit, une valeur définie par l'implémentation est retournée.
Si une erreur de pôle se produit,
-HUGE_VAL
,
-HUGE_VALF
, ou
-HUGE_VALL
est retourné.
Gestion des erreurs
Les erreurs sont signalées comme spécifié dans
math_errhandling
.
Une erreur de domaine ou de plage peut survenir si arg est nul.
Si l'implémentation prend en charge l'arithmétique à virgule flottante IEEE (IEC 60559),
- Si arg est ±0, -∞ est retourné et FE_DIVBYZERO est déclenché.
- Si arg est ±∞, +∞ est retourné.
- Si arg est NaN, NaN est retourné.
- Dans tous les autres cas, le résultat est exact ( FE_INEXACT n'est jamais déclenché) et le mode d'arrondi actuel est ignoré.
Notes
POSIX exige qu'une erreur de pôle se produise si arg est ±0.
La valeur de l'exposant retournée par
logb
est toujours
1
de moins que l'exposant retourné par
frexp
en raison des différentes exigences de normalisation : pour l'exposant
e
retourné par
logb
,
|arg*r
-e
|
est compris entre
1
et
r
(généralement entre
1
et
2
), mais pour l'exposant
e
retourné par
frexp
,
|arg*2
-e
|
est compris entre
0.5
et
1
.
Exemple
Compare différentes fonctions de décomposition en virgule flottante.
#include <fenv.h> #include <float.h> #include <math.h> #include <stdio.h> // #pragma STDC FENV_ACCESS ON int main(void) { double f = 123.45; printf("Given the number %.2f or %a in hex,\n", f, f); double f3; double f2 = modf(f, &f3); printf("modf() makes %.0f + %.2f\n", f3, f2); int i; f2 = frexp(f, &i); printf("frexp() makes %f * 2^%d\n", f2, i); i = logb(f); printf("logb()/logb() make %f * %d^%d\n", f/scalbn(1.0, i), FLT_RADIX, i); // error handling feclearexcept(FE_ALL_EXCEPT); printf("logb(0) = %f\n", logb(0)); if (fetestexcept(FE_DIVBYZERO)) puts(" FE_DIVBYZERO raised"); }
Sortie possible :
Given the number 123.45 or 0x1.edccccccccccdp+6 in hex,
modf() makes 123 + 0.45
frexp() makes 0.964453 * 2^7
logb()/logb() make 1.928906 * 2^6
logb(0) = -Inf
FE_DIVBYZERO raised
Références
- Norme C23 (ISO/CEI 9899:2024) :
-
- 7.12.6.11 Les fonctions logb (p: TBD)
-
- 7.25 Mathématiques génériques de type <tgmath.h> (p: TBD)
-
- F.10.3.11 Les fonctions logb (p: TBD)
- Norme C17 (ISO/CEI 9899:2018) :
-
- 7.12.6.11 Les fonctions logb (p: 179-180)
-
- 7.25 Mathématiques génériques <tgmath.h> (p: 373-375)
-
- F.10.3.11 Les fonctions logb (p: 381)
- Norme C11 (ISO/CEI 9899:2011) :
-
- 7.12.6.11 Les fonctions logb (p: 246)
-
- 7.25 Mathématiques génériques de type <tgmath.h> (p: 373-375)
-
- F.10.3.11 Les fonctions logb (p: 522)
- Norme C99 (ISO/CEI 9899:1999) :
-
- 7.12.6.11 Les fonctions logb (p. 227)
-
- 7.22 Mathématiques génériques de type <tgmath.h> (p. 335-337)
-
- F.9.3.11 Les fonctions logb (p. 459)
Voir aussi
|
(C99)
(C99)
|
décompose un nombre en mantisse et puissance de
2
(fonction) |
|
(C99)
(C99)
(C99)
|
extrait l'exposant du nombre donné
(fonction) |
|
(C99)
(C99)
(C99)
(C99)
(C99)
(C99)
|
calcule efficacement un nombre multiplié par
FLT_RADIX
élevé à une puissance
(fonction) |
|
Documentation C++
pour
logb
|
|