std::log2, std::log2f, std::log2l
| Definiert in der Header-Datei <cmath> |
||
| (1) | ||
float log2 ( float num ); double log2 ( double num ); |
(bis C++23) | |
| /* Gleitkommazahl-Typ */ log2 ( /*floating-point-type*/ num ); |
(seit C++23) (constexpr seit C++26) |
|
float log2f( float num ); |
(2) | (seit C++11) (constexpr seit C++26) |
long double log2l( long double num ); |
(3) | (seit C++11) (constexpr seit C++26) |
| SIMD-Überladung (seit C++26) |
||
| Definiert im Header <simd> |
||
| template< /*math-floating-point*/ V > constexpr /*deduzierter-simd-t*/<V> |
(S) | (seit C++26) |
| Zusätzliche Überladungen (seit C++11) |
||
| Definiert in der Header-Datei <cmath> |
||
template< class Integer > double log2 ( Integer num ); |
(A) | (constexpr seit C++26) |
std::log2 für alle unveränderten Gleitkommatypen als Parametertyp bereit.(seit C++23)|
S) Die SIMD-Überladung führt ein elementweises
std::log2 für v_num durch.
|
(seit C++26) |
|
A) Zusätzliche Überladungen werden für alle ganzzahligen Typen bereitgestellt, die als double behandelt werden.
|
(seit C++11) |
Inhalt |
[edit] Parameter
| num | - | Gleitkomma- oder Ganzzahlwert |
[edit] Rückgabewert
Wenn keine Fehler auftreten, wird der Basis-2-Logarithmus von num (log2(num) oder lb(num)) zurückgegeben.
Wenn ein Domänenfehler auftritt, wird ein implementierungsabhängiger Wert zurückgegeben (NaN, wo unterstützt).
Wenn ein Pol-Fehler auftritt, werden -HUGE_VAL, -HUGE_VALF oder -HUGE_VALL zurückgegeben.
[edit] Fehlerbehandlung
Fehler werden wie in math_errhandling beschrieben gemeldet.
Ein Domänenfehler tritt auf, wenn num kleiner als Null ist.
Ein Pol-Fehler kann auftreten, wenn num null ist.
Wenn die Implementierung IEEE-Gleitkomma-Arithmetik (IEC 60559) unterstützt,
- Wenn das Argument ±0 ist, wird -∞ zurückgegeben und FE_DIVBYZERO wird ausgelöst.
- Wenn das Argument 1 ist, wird +0 zurückgegeben.
- Wenn das Argument negativ ist, wird NaN zurückgegeben und FE_INVALID wird ausgelöst.
- Wenn das Argument +∞ ist, wird +∞ zurückgegeben.
- Wenn das Argument NaN ist, wird NaN zurückgegeben.
[edit] Hinweise
Für ganze Zahlen num kann der Binärlogarithmus als der nullbasierte Index des höchstwertigen gesetzten Bits in der Eingabe interpretiert werden.
Die zusätzlichen Überladungen müssen nicht exakt als (A) bereitgestellt werden. Sie müssen nur ausreichend sein, um sicherzustellen, dass für ihr Argument num vom ganzzahligen Typ std::log2(num) denselben Effekt hat wie std::log2(static_cast<double>(num)).
[edit] Beispiel
#include <cerrno> #include <cfenv> #include <cmath> #include <cstring> #include <iostream> // #pragma STDC FENV_ACCESS ON int main() { std::cout << "log2(65536) = " << std::log2(65536) << '\n' << "log2(0.125) = " << std::log2(0.125) << '\n' << "log2(0x020f) = " << std::log2(0x020f) << " (highest set bit is in position 9)\n" << "base-5 logarithm of 125 = " << std::log2(125) / std::log2(5) << '\n'; // special values std::cout << "log2(1) = " << std::log2(1) << '\n' << "log2(+Inf) = " << std::log2(INFINITY) << '\n'; // error handling errno = 0; std::feclearexcept(FE_ALL_EXCEPT); std::cout << "log2(0) = " << std::log2(0) << '\n'; if (errno == ERANGE) std::cout << " errno == ERANGE: " << std::strerror(errno) << '\n'; if (std::fetestexcept(FE_DIVBYZERO)) std::cout << " FE_DIVBYZERO raised\n"; }
Mögliche Ausgabe
log2(65536) = 16
log2(0.125) = -3
log2(0x020f) = 9.04166 (highest set bit is in position 9)
base-5 logarithm of 125 = 3
log2(1) = 0
log2(+Inf) = inf
log2(0) = -inf
errno == ERANGE: Numerical result out of range
FE_DIVBYZERO raised[edit] Siehe auch
| (C++11)(C++11) |
berechnet den natürlichen (Basis e) Logarithmus (ln(x)) (Funktion) |
| (C++11)(C++11) |
berechnet den dekadischen (Basis 10) Logarithmus (log10(x)) (Funktion) |
| (C++11)(C++11)(C++11) |
natürlicher Logarithmus (Basis e) von 1 plus der gegebenen Zahl (ln(1+x)) (Funktion) |
| (C++11)(C++11)(C++11) |
gibt 2 hoch der gegebenen Potenz zurück (2x) (Funktion) |
| C-Dokumentation für log2
| |