Namensräume
Varianten
Aktionen

fegetround, fesetround

Von cppreference.com
< c‎ | numeric‎ | fenv
Definiert in der Headerdatei <fenv.h>
int fesetround( int round );
(1) (seit C99)
int fegetround();
(2) (seit C99)

1) Versucht, die Rundungsrichtung der Gleitkommazahlen auf das Argument round zu setzen, das eine der Gleitkomma-Rundungs-Makros sein sollte.

2) Gibt den Wert des Gleitkomma-Rundungs-Makros zurück, das der aktuellen Rundungsrichtung entspricht.

Inhalt

[bearbeiten] Parameter

round - Rundungsrichtung, eines der Gleitkomma-Rundungs-Makros

[bearbeiten] Rückgabewert

1) 0 bei Erfolg, andernfalls ungleich Null.

2) das Gleitkomma-Rundungs-Makro, das die aktuelle Rundungsrichtung beschreibt, oder ein negativer Wert, wenn die Richtung nicht bestimmt werden kann.

[bearbeiten] Hinweise

Der aktuelle Rundungsmodus, der die Auswirkungen des letzten Aufrufs von fesetround widerspiegelt, kann auch mit FLT_ROUNDS abgefragt werden.

[bearbeiten] Beispiel

#include <fenv.h>
#include <math.h>
#include <stdio.h>
 
// #pragma STDC FENV_ACCESS ON
 
void show_fe_current_rounding_direction(void)
{
    printf("current rounding direction:  ");
    switch (fegetround())
    {
           case FE_TONEAREST:  printf ("FE_TONEAREST");  break;
           case FE_DOWNWARD:   printf ("FE_DOWNWARD");   break;
           case FE_UPWARD:     printf ("FE_UPWARD");     break;
           case FE_TOWARDZERO: printf ("FE_TOWARDZERO"); break;
           default:            printf ("unknown");
    };
    printf("\n");
}
 
int main(void)
{
    /* Default rounding direction */
    show_fe_current_rounding_direction();
    printf("+11.5 -> %+4.1f\n", rint(+11.5)); /* midway between two integers */
    printf("+12.5 -> %+4.1f\n", rint(+12.5)); /* midway between two integers */
 
    /* Save current rounding direction. */
    int curr_direction = fegetround();
 
    /* Temporarily change current rounding direction. */
    fesetround(FE_DOWNWARD);
    show_fe_current_rounding_direction();
    printf("+11.5 -> %+4.1f\n", rint(+11.5));
    printf("+12.5 -> %+4.1f\n", rint(+12.5));
 
    /* Restore default rounding direction. */
    fesetround(curr_direction);
    show_fe_current_rounding_direction();
 
    return 0;
}

Mögliche Ausgabe

current rounding direction:  FE_TONEAREST
+11.5 -> +12.0
+12.5 -> +12.0
current rounding direction:  FE_DOWNWARD
+11.5 -> +11.0
+12.5 -> +12.0
current rounding direction:  FE_TONEAREST

[bearbeiten] Referenzen

  • C23-Standard (ISO/IEC 9899:2024)
  • 7.6.3.1 Die Funktion fegetround (S. TBD)
  • 7.6.3.2 Die Funktion fesetround (S. TBD)
  • C17-Standard (ISO/IEC 9899:2018)
  • 7.6.3.1 Die Funktion fegetround (S. TBD)
  • 7.6.3.2 Die Funktion fesetround (S. TBD)
  • C11-Standard (ISO/IEC 9899:2011)
  • 7.6.3.1 Die Funktion fegetround (S. 212)
  • 7.6.3.2 Die Funktion fesetround (S. 212-213)
  • C99-Standard (ISO/IEC 9899:1999)
  • 7.6.3.1 Die Funktion fegetround (S. 193)
  • 7.6.3.2 Die Funktion fesetround (S. 193-194)

[bearbeiten] Siehe auch

rundet auf eine ganze Zahl gemäß der aktuellen Rundungsregel
(Funktion) [bearbeiten]
(C99)(C99)(C99)(C99)(C99)(C99)(C99)(C99)(C99)
rundet auf eine ganze Zahl gemäß der aktuellen Rundungsregel mit
Ausnahme, wenn das Ergebnis abweicht
(Funktion) [bearbeiten]
C++ Dokumentation für fegetround, fesetround