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
scalbnf
oder
scalblnf
aufgerufen, entsprechend.
Inhaltsverzeichnis |
Parameter
| arg | - | Gleitkommawert |
| exp | - | Ganzzahlwert |
Rückgabewert
Wenn keine Fehler auftreten,
arg
multipliziert mit
FLT_RADIX
hoch
exp
(
arg×FLT_RADIX
exp
) wird zurückgegeben.
Wenn ein Bereichsfehler aufgrund von Überlauf auftritt,
±
HUGE_VAL
,
±HUGE_VALF
, oder
±HUGE_VALL
wird zurückgegeben.
Wenn ein Bereichsfehler aufgrund von Unterlauf auftritt, wird das korrekte Ergebnis (nach Rundung) zurückgegeben.
Fehlerbehandlung
Fehler werden gemeldet, wie in
math_errhandling
festgelegt.
Wenn die Implementierung IEEE-Gleitkommaarithmetik (IEC 60559) unterstützt,
- Sofern kein Bereichsfehler auftritt, FE_INEXACT wird 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.
Hinweise
Auf binären Systemen (wo
FLT_RADIX
gleich
2
ist),
ist
scalbn
äquivalent zu
ldexp
.
Obwohl
scalbn
und
scalbln
spezifiziert sind, um die Operation effizient durchzuführen, sind sie in vielen Implementierungen weniger effizient als Multiplikation oder Division mit einer Zweierpotenz unter Verwendung arithmetischer Operatoren.
Die
scalbln
-Funktion wird bereitgestellt, weil der Faktor, der benötigt wird, um vom kleinsten positiven Gleitkommawert zum größten endlichen zu skalieren, größer sein kann als
32767
, der standardmäßig garantierte
INT_MAX
. Insbesondere für den 80-Bit-
long
double
beträgt der Faktor
32828
.
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
Referenzen
- C23-Standard (ISO/IEC 9899:2024):
-
- 7.12.6.13 Die scalbn-Funktionen (S.: TBD)
-
- 7.25 Typgenerische Mathematik <tgmath.h> (S.: TBD)
-
- F.10.3.13 Die scalbn-Funktionen (S.: TBD)
- C17-Standard (ISO/IEC 9899:2018):
-
- 7.12.6.13 Die scalbn-Funktionen (S.: TBD)
-
- 7.25 Typgenerische Mathematik <tgmath.h> (S.: TBD)
-
- F.10.3.13 Die scalbn-Funktionen (S.: TBD)
- C11-Standard (ISO/IEC 9899:2011):
-
- 7.12.6.13 Die scalbn-Funktionen (S: 247)
-
- 7.25 Typgenerische Mathematik <tgmath.h> (S: 373-375)
-
- F.10.3.13 Die scalbn-Funktionen (S: 523)
- C99-Standard (ISO/IEC 9899:1999):
-
- 7.12.6.13 Die scalbn-Funktionen (S. 228)
-
- 7.22 Typgenerische Mathematik <tgmath.h> (S. 335-337)
-
- F.9.3.13 Die scalbn-Funktionen (S. 460)
Siehe auch
|
(C99)
(C99)
|
zerlegt eine Zahl in Signifikand und Zweierpotenz
2
(Funktion) |
|
(C99)
(C99)
|
multipliziert eine Zahl mit
2
hoch einer Potenz
(Funktion) |
|
C++ documentation
für
scalbn
|
|