Namensräume
Varianten
Aktionen

std::trunc, std::truncf, std::truncl

Von cppreference.com
< cpp‎ | numeric‎ | math
 
 
 
 
Definiert in der Header-Datei <cmath>
(1)
float        trunc ( float num );

double      trunc ( double num );

long double trunc ( long 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>

            trunc ( const V& v_num );
(S) (seit C++26)
Definiert in der Header-Datei <cmath>
template< class Integer >
double      trunc ( Integer num );
(A) (constexpr seit C++23)
1-3) Berechnet die nächste ganze Zahl, deren Betrag nicht größer ist als num. Die Bibliothek stellt Überladungen von 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.
(Siehe math-floating-point und deduced-simd-t für ihre Definitionen.)
(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).

Rückgabewert
math-trunc.svg
num

[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) [bearbeiten]
(C++11)(C++11)
nächste ganze Zahl, die nicht kleiner ist als der gegebene Wert
(Funktion) [bearbeiten]
(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) [bearbeiten]
C-Dokumentation für trunc