std::trunc, std::truncf, std::truncl
| Definiert in der Header-Datei <cmath> |
||
| (1) | ||
float trunc ( float num ); double trunc ( double num ); |
(bis C++23) | |
| constexpr /*Gleitkommazahl-Typ*/ trunc ( /*Gleitkomma-Typ*/ num ); |
(seit C++23) | |
float truncf( float num ); |
(2) | (seit C++11) (constexpr seit C++23) |
long double truncl( long double num ); |
(3) | (seit C++11) (constexpr seit C++23) |
| 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 trunc ( Integer num ); |
(A) | (constexpr seit C++23) |
std::trunc für alle cv-unqualifizierten Gleitkommatypen als Parametertyp bereit.(seit C++23)|
S) Die SIMD-Überladung führt eine elementweise
std::trunc auf 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 nächstgelegene ganzzahlige Wert zurückgegeben, dessen Betrag nicht größer ist als num (d.h., num abgerundet auf Null).
[edit] Fehlerbehandlung
Fehler werden wie in math_errhandling beschrieben gemeldet.
Wenn die Implementierung IEEE-Gleitkomma-Arithmetik (IEC 60559) unterstützt,
- Der aktuelle Rundungsmodus hat keinen Einfluss.
- Wenn num ±∞ ist, wird es unverändert zurückgegeben.
- Wenn num ±0 ist, wird es unverändert zurückgegeben.
- Wenn num NaN ist, wird NaN zurückgegeben.
[edit] Hinweise
FE_INEXACT kann ausgelöst werden (muss aber nicht), wenn eine endliche Nicht-Ganzzahl-Zahl abgeschnitten wird.
Die größten darstellbaren Gleitkommazahlen sind in allen Standard-Gleitkommaformaten exakte ganze Zahlen. Daher kann diese Funktion alleine nicht überlaufen; das Ergebnis kann jedoch jeden ganzzahligen Typ (einschließlich std::intmax_t) überlaufen, wenn es in einer ganzzahligen Variablen gespeichert wird.
Die implizite Konvertierung von Gleitkommazahlen in ganzzahlige Typen rundet ebenfalls auf Null, ist aber auf Werte beschränkt, die vom Zieltyp dargestellt werden können.
Die zusätzlichen Überladungen müssen nicht exakt als (A) bereitgestellt werden. Sie müssen nur ausreichen, um sicherzustellen, dass für ihr Argument num vom ganzzahligen Typ std::trunc(num) denselben Effekt hat wie std::trunc(static_cast<double>(num)).
[edit] Beispiel
#include <cmath> #include <initializer_list> #include <iostream> int main() { const auto data = std::initializer_list<double> { +2.7, -2.9, +0.7, -0.9, +0.0, 0.0, -INFINITY, +INFINITY, -NAN, +NAN }; std::cout << std::showpos; for (double const x : data) std::cout << "trunc(" << x << ") == " << std::trunc(x) << '\n'; }
Mögliche Ausgabe
trunc(+2.7) == +2 trunc(-2.9) == -2 trunc(+0.7) == +0 trunc(-0.9) == -0 trunc(+0) == +0 trunc(+0) == +0 trunc(-inf) == -inf trunc(+inf) == +inf trunc(-nan) == -nan trunc(+nan) == +nan
[edit] Siehe auch
| (C++11)(C++11) |
nächste ganze Zahl, die nicht größer ist als der gegebene Wert (Funktion) |
| (C++11)(C++11) |
nächste ganze Zahl, die nicht kleiner ist als der gegebene Wert (Funktion) |
| (C++11)(C++11)(C++11)(C++11)(C++11)(C++11)(C++11)(C++11)(C++11) |
nächste ganze Zahl, Rundung weg von Null bei Halbwertigkeiten (Funktion) |
| C-Dokumentation für trunc
| |