scalbn, scalbnf, scalbnl, scalbln, scalblnf, scalblnl
| Definiert in Header <math.h> |
||
| float scalbnf( float arg, int exp ); |
(1) | (seit C99) |
| double scalbn( double arg, int exp ); |
(2) | (seit C99) |
| long double scalbnl( long double arg, int exp ); |
(3) | (seit C99) |
| Definiert in Header <tgmath.h> |
||
| #define scalbn( arg, exp ) |
(4) | (seit C99) |
| Definiert in Header <math.h> |
||
| float scalblnf( float arg, long exp ); |
(5) | (seit C99) |
| double scalbln( double arg, long exp ); |
(6) | (seit C99) |
| long double scalblnl( long double arg, long exp ); |
(7) | (seit C99) |
| Definiert in Header <tgmath.h> |
||
| #define scalbln( arg, exp ) |
(8) | (seit C99) |
scalbnl oder scalblnl aufgerufen. Andernfalls, wenn arg einen Ganzzahltyp oder den Typ double hat, wird scalbn oder scalbln aufgerufen. Andernfalls wird entsprechend scalbnf oder scalblnf aufgerufen.Inhalt |
[edit] Parameter
| arg | - | Gleitkommawert |
| exp | - | ganzzahliger Wert |
[edit] Rückgabewert
Wenn keine Fehler auftreten, wird arg multipliziert mit FLT_RADIX hoch die Potenz von exp (arg×FLT_RADIXexp
) zurückgegeben.
Wenn ein Bereichsfehler aufgrund von Überlauf auftritt, wird ±HUGE_VAL, ±HUGE_VALF oder ±HUGE_VALL zurückgegeben.
Wenn ein Bereichsfehler aufgrund von Unterlauf auftritt, wird das korrekte Ergebnis (nach Rundung) zurückgegeben.
[edit] Fehlerbehandlung
Fehler werden wie in math_errhandling angegeben gemeldet.
Wenn die Implementierung IEEE-Gleitkomma-Arithmetik (IEC 60559) unterstützt,
- Sofern kein Bereichsfehler auftritt, wird FE_INEXACT niemals ausgelöst (das Ergebnis ist exakt).
- Sofern kein Bereichsfehler auftritt, wird der aktuelle Rundungsmodus ignoriert.
- Wenn arg ±0 ist, wird es unverändert zurückgegeben.
- Wenn arg ±∞ ist, wird es unverändert zurückgegeben.
- Wenn exp 0 ist, dann wird
argunverändert zurückgegeben. - Wenn arg NaN ist, wird NaN zurückgegeben.
[edit] Hinweise
Auf binären Systemen (wo FLT_RADIX 2 ist), ist scalbn äquivalent zu ldexp.
Obwohl für scalbn und scalbln angegeben ist, dass sie die Operation effizient ausführen, sind sie in vielen Implementierungen weniger effizient als die Multiplikation oder Division mit einer Zweierpotenz mittels arithmetischer Operatoren.
Die Funktion scalbln ist vorhanden, da der Faktor, der benötigt wird, um vom kleinsten positiven Gleitkommawert zum größten endlichen zu skalieren, größer als 32767, das standardgarantiert INT_MAX, sein kann. Insbesondere für den 80-Bit long double beträgt der Faktor 32828.
[edit] Beispiel
#include <errno.h> #include <fenv.h> #include <float.h> #include <math.h> #include <stdio.h> // #pragma STDC FENV_ACCESS ON int main(void) { printf("scalbn(7, -4) = %f\n", scalbn(7, -4)); printf("scalbn(1, -1074) = %g (minimum positive subnormal double)\n", scalbn(1, -1074)); printf("scalbn(nextafter(1,0), 1024) = %g (largest finite double)\n", scalbn(nextafter(1,0), 1024)); // special values printf("scalbn(-0, 10) = %f\n", scalbn(-0.0, 10)); printf("scalbn(-Inf, -1) = %f\n", scalbn(-INFINITY, -1)); // error handling errno = 0; feclearexcept(FE_ALL_EXCEPT); printf("scalbn(1, 1024) = %f\n", scalbn(1, 1024)); if (errno == ERANGE) perror(" errno == ERANGE"); if (fetestexcept(FE_OVERFLOW)) puts(" FE_OVERFLOW raised"); }
Mögliche Ausgabe
scalbn(7, -4) = 0.437500
scalbn(1, -1074) = 4.94066e-324 (minimum positive subnormal double)
scalbn(nextafter(1,0), 1024) = 1.79769e+308 (largest finite double)
scalbn(-0, 10) = -0.000000
scalbn(-Inf, -1) = -inf
scalbn(1, 1024) = inf
errno == ERANGE: Numerical result out of range
FE_OVERFLOW raised[edit] Referenzen
- C23-Standard (ISO/IEC 9899:2024)
- 7.12.6.13 The scalbn functions (S. TBD)
- 7.25 Typ-generische Mathematik <tgmath.h> (S. TBD)
- F.10.3.13 The scalbn functions (S. TBD)
- C17-Standard (ISO/IEC 9899:2018)
- 7.12.6.13 The scalbn functions (S. TBD)
- 7.25 Typ-generische Mathematik <tgmath.h> (S. TBD)
- F.10.3.13 The scalbn functions (S. TBD)
- C11-Standard (ISO/IEC 9899:2011)
- 7.12.6.13 The scalbn functions (S. 247)
- 7.25 Typ-generische Mathematik <tgmath.h> (S. 373-375)
- F.10.3.13 The scalbn functions (S. 523)
- C99-Standard (ISO/IEC 9899:1999)
- 7.12.6.13 The scalbn functions (S. 228)
- 7.22 Typ-generische Mathematik <tgmath.h> (S. 335-337)
- F.9.3.13 The scalbn functions (S. 460)
[edit] Siehe auch
| (C99)(C99) |
teilt eine Zahl in Mantisse und Potenz von 2 auf (Funktion) |
| (C99)(C99) |
multipliziert eine Zahl mit 2 hoch eine Potenz (Funktion) |
| C++ Dokumentation für scalbn
| |