Namensräume
Varianten
Aktionen

modf, modff, modfl

Von cppreference.com
< c‎ | numerik‎ | math
 
 
 
Allgemeine mathematische Funktionen
Funktionen
Grundlegende Operationen
(C99)
(C99)
(C99)
(C99)(C99)(C99)(C23)
Maximum/Minimum-Operationen
(C99)
(C99)
Exponentialfunktionen
(C23)
(C99)
(C99)
(C23)
(C23)

(C99)
(C99)(C23)
(C23)
(C23)
Potenzfunktionen
(C99)
(C23)
(C23)

(C99)
(C23)
(C23)
Trigonometrische und hyperbolische Funktionen
(C23)
(C23)
(C23)
(C23)
(C99)
(C99)
(C99)
Nächste ganze Gleitkommazahlen
(C99)(C99)(C99)
(C99)

(C99)(C99)(C99)
(C23)(C23)(C23)(C23)
Gleitkomma-Manipulation
(C99)(C99)
(C99)(C23)
(C99)
modf
(C23)(C23)
Verengende Operationen
(C23)
(C23)
(C23)
(C23)
(C23)
(C23)
Quanten- und Quantenexponent-Funktionen
Dezimal-Neu-Kodierungsfunktionen
Gesamtordnung und Payload-Funktionen
Klassifizierung
(C99)
(C99)
(C99)
(C23)
Fehler- und Gammafunktionen
(C99)
(C99)
(C99)
(C99)
Typen
Makrokonstanten
Spezielle Gleitkommawerte
(C99)(C23)
Argumente und Rückgabewerte
Fehlerbehandlung
Schnelle Operationsanzeigen
 
Definiert in Header <math.h>
float       modff( float arg, float* iptr );
(1) (seit C99)
double      modf( double arg, double* iptr );
(2)
long double modfl( long double arg, long double* iptr );
(3) (seit C99)
1-3) Zerlegt den gegebenen Fließkommawert arg in den ganzzahligen und den gebrochenen Teil, die beide denselben Typ und dasselbe Vorzeichen wie arg haben. Der ganzzahlige Teil (im Fließkommaformat) wird in das Objekt gespeichert, auf das iptr zeigt.

Inhalt

[bearbeiten] Parameter

arg - Gleitkommawert
iptr - Zeiger auf einen Fließkommawert, in dem der ganzzahlige Teil gespeichert werden soll

[bearbeiten] Rückgabewert

Wenn keine Fehler auftreten, wird der gebrochene Teil von arg mit demselben Vorzeichen wie arg zurückgegeben. Der ganzzahlige Teil wird in den Wert geschrieben, auf den iptr zeigt.

Die Summe aus dem Rückgabewert und dem Wert, der in *iptr gespeichert ist, ergibt arg (unter Berücksichtigung von Rundungsfehlern).

[bearbeiten] Fehlerbehandlung

Diese Funktion unterliegt keinen Fehlern, die in math_errhandling spezifiziert sind.

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

  • Wenn arg ±0 ist, wird ±0 zurückgegeben und ±0 wird in *iptr gespeichert.
  • Wenn arg ±∞ ist, wird ±0 zurückgegeben und ±∞ wird in *iptr gespeichert.
  • Wenn arg NaN ist, wird NaN zurückgegeben und NaN wird in *iptr gespeichert.
  • Der zurückgegebene Wert ist exakt; der aktuelle Rundungsmodus wird ignoriert.

[bearbeiten] Anmerkungen

Diese Funktion verhält sich, als ob sie wie folgt implementiert wäre

double modf(double value, double *iptr)
{
#pragma STDC FENV_ACCESS ON
    int save_round = fegetround();
    fesetround(FE_TOWARDZERO);
    *iptr = std::nearbyint(value);
    fesetround(save_round);
    return copysign(isinf(value) ? 0.0 : value - (*iptr), value);
}

[bearbeiten] Beispiel

#include <float.h>
#include <math.h>
#include <stdio.h>
 
int main(void)
{
    double f = 123.45;
    printf("Given the number %.2f or %a in hex,\n", f, f);
 
    double f3;
    double f2 = modf(f, &f3);
    printf("modf() makes %.2f + %.2f\n", f3, f2);
 
    int i;
    f2 = frexp(f, &i);
    printf("frexp() makes %f * 2^%d\n", f2, i);
 
    i = ilogb(f);
    printf("logb()/ilogb() make %f * %d^%d\n", f / scalbn(1.0, i), FLT_RADIX, i);
 
    // special values
    f2 = modf(-0.0, &f3);
    printf("modf(-0) makes %.2f + %.2f\n", f3, f2);
    f2 = modf(-INFINITY, &f3);
    printf("modf(-Inf) makes %.2f + %.2f\n", f3, f2);
}

Mögliche Ausgabe

Given the number 123.45 or 0x1.edccccccccccdp+6 in hex,
modf() makes 123.00 + 0.45
frexp() makes 0.964453 * 2^7
logb()/ilogb() make 1.92891 * 2^6
modf(-0) makes -0.00 + -0.00
modf(-Inf) makes -INF + -0.00

[bearbeiten] Referenzen

  • C23-Standard (ISO/IEC 9899:2024)
  • 7.12.6.12 Die modf-Funktionen (S. TBD)
  • F.10.3.12 Die modf-Funktionen (S. TBD)
  • C17-Standard (ISO/IEC 9899:2018)
  • 7.12.6.12 Die modf-Funktionen (S. TBD)
  • F.10.3.12 Die modf-Funktionen (S. TBD)
  • C11-Standard (ISO/IEC 9899:2011)
  • 7.12.6.12 Die modf-Funktionen (S. 246-247)
  • F.10.3.12 Die modf-Funktionen (S. 523)
  • C99-Standard (ISO/IEC 9899:1999)
  • 7.12.6.12 Die modf-Funktionen (S. 227)
  • F.9.3.12 Die modf-Funktionen (S. 460)
  • C89/C90-Standard (ISO/IEC 9899:1990)
  • 4.5.4.6 Die modf-Funktion

[bearbeiten] Siehe auch

(C99)(C99)(C99)
rundet auf die größte ganze Zahl, deren Betrag nicht größer als der gegebene Wert ist
(Funktion) [bearbeiten]