Namensräume
Varianten
Aktionen

std::fdim, std::fdimf, std::fdiml

Von cppreference.com
< cpp‎ | numeric‎ | math
 
 
 
 
Definiert in der Header-Datei <cmath>
(1)
float       fdim ( float x, float y );

double      fdim ( double x, double y );

long double fdim ( long double x, long double y );
(bis C++23)
constexpr /*Gleitkommazahl-Typ*/

            fdim ( /*Gleitkommazahltyp*/ x,

                   /* Gleitkommazahl-Typ */ y );
(seit C++23)
float       fdimf( float x, float y );
(2) (seit C++11)
(constexpr seit C++23)
long double fdiml( long double x, long double y );
(3) (seit C++11)
(constexpr seit C++23)
SIMD-Überladung (seit C++26)
Definiert im Header <simd>
template< class V0, class V1 >

constexpr /*math-common-simd-t*/<V0, V1>

            fdim ( const V0& v_x, const V1& v_y );
(S) (seit C++26)
Definiert in der Header-Datei <cmath>
template< class Integer >
double      fdim ( Integer x, Integer y );
(A) (constexpr seit C++23)
1-3) Gibt die positive Differenz zwischen x und y zurück, d.h. wenn x > y, gibt x - y zurück, andernfalls (d.h. wenn x <= y) gibt +0 zurück. Die Bibliothek stellt Überladungen von std::fdim für alle cv-unqualified Gleitkommatypen als Typ der Parameter bereit.(seit C++23)
S) Die SIMD-Überladung führt ein elementweises std::fdim auf v_x und v_y durch.
(Siehe math-common-simd-t für dessen Definition.)
(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

x, y - Gleitkomma- oder Ganzzahlwerte

[edit] Rückgabewert

Bei Erfolg wird die positive Differenz zwischen x und y 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 der korrekte Wert (nach Rundung) zurückgegeben.

[edit] Fehlerbehandlung

Fehler werden wie in math_errhandling beschrieben gemeldet.

Wenn die Implementierung IEEE-Gleitkomma-Arithmetik (IEC 60559) unterstützt,

  • Wenn eines der Argumente NaN ist, wird NaN zurückgegeben.

[edit] Hinweise

Äquivalent zu std::fmax(x - y, 0), außer bei den Anforderungen an die NaN-Behandlung.

Die zusätzlichen Überladungen müssen nicht exakt wie (A) angegeben werden. Sie müssen nur ausreichen, um sicherzustellen, dass für ihr erstes Argument num1 und ihr zweites Argument num2

  • Wenn num1 oder num2 den Typ long double hat, hat std::fdim(num1, num2) denselben Effekt wie std::fdim(static_cast<long double>(num1),
              static_cast<long double>(num2))
    .
  • Andernfalls, wenn num1 und/oder num2 den Typ double oder einen Ganzzahltyp haben, hat std::fdim(num1, num2) denselben Effekt wie std::fdim(static_cast<double>(num1),
              static_cast<double>(num2))
    .
  • Andernfalls, wenn num1 oder num2 den Typ float haben, hat std::fdim(num1, num2) denselben Effekt wie std::fdim(static_cast<float>(num1),
              static_cast<float>(num2))
    .
(bis C++23)

Wenn num1 und num2 arithmetische Typen haben, hat std::fdim(num1, num2) denselben Effekt wie std::fdim(static_cast</*gemeinsamer-Gleitkommatyp*/>(num1),
          static_cast</*gemeinsamer-Gleitkommatyp*/>(num2))
, wobei /*gemeinsamer-Gleitkommatyp*/ der Gleitkommatyp mit dem höchsten Gleitkomma-Konversionsrang und dem höchsten Gleitkomma-Konversions-Subrang zwischen den Typen von num1 und num2 ist. Argumente vom Ganzzahltyp werden so behandelt, als hätten sie denselben Gleitkomma-Konversionsrang wie double.

Wenn kein solcher Gleitkommazahltyp mit dem höchsten Rang und Subrang existiert, dann führt die Überladungsauflösung nicht zu einem nutzbaren Kandidaten aus den bereitgestellten Überladungen.

(seit C++23)

[edit] Beispiel

#include <cerrno>
#include <cfenv>
#include <cmath>
#include <cstring>
#include <iostream>
 
#ifndef __GNUC__
#pragma STDC FENV_ACCESS ON
#endif
 
int main()
{
    std::cout << "fdim(4, 1) = " << std::fdim(4, 1) << '\n'
              << "fdim(1, 4) = " << std::fdim(1, 4) << '\n'
              << "fdim(4,-1) = " << std::fdim(4, -1) << '\n'
              << "fdim(1,-4) = " << std::fdim(1, -4) << '\n';
 
    // error handling 
    errno = 0;
    std::feclearexcept(FE_ALL_EXCEPT);
 
    std::cout << "fdim(1e308, -1e308) = " << std::fdim(1e308, -1e308) << '\n';
 
    if (errno == ERANGE)
        std::cout << "    errno == ERANGE: " << std::strerror(errno) << '\n';
    if (std::fetestexcept(FE_OVERFLOW))
        std::cout << "    FE_OVERFLOW raised\n";
}

Ausgabe

fdim(4, 1) = 3
fdim(1, 4) = 0
fdim(4,-1) = 5
fdim(1,-4) = 5
fdim(1e308, -1e308) = inf
    errno == ERANGE: Numerical result out of range
    FE_OVERFLOW raised

[edit] Siehe auch

berechnet den Absolutwert eines ganzzahligen Wertes (|x|)
(Funktion) [bearbeiten]
(C++11)(C++11)(C++11)
größerer von zwei Gleitkommawerten
(Funktion) [bearbeiten]
C-Dokumentation für fdim