Namespaces
Variants

fegetround, fesetround

From cppreference.net
< c ‎ | numeric ‎ | fenv
Definiert im Header <fenv.h>
int fesetround ( int round ) ;
(1) (seit C99)
int fegetround ( ) ;
(2) (seit C99)

1) Versucht, die Gleitkomma-Rundungsrichtung gleich dem Argument round zu setzen, von dem erwartet wird, dass es eines der Gleitkomma-Rundungsmakros ist.

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

Inhaltsverzeichnis

Parameter

round - Rundungsrichtung, eine der Gleitkomma-Rundungsmakros

Rückgabewert

1) 0 bei Erfolg, andernfalls ungleich Null.

2) das floating-point rounding macro beschreibt die aktuelle Rundungsrichtung oder einen negativen Wert, wenn die Richtung nicht bestimmt werden kann.

Hinweise

Der aktuelle Rundungsmodus, der die Auswirkungen des zuletzt ausgeführten fesetround widerspiegelt, kann auch mit FLT_ROUNDS abgefragt werden.

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)
{
    /* Standard-Rundungsrichtung */
    show_fe_current_rounding_direction();
    printf("+11.5 -> %+4.1f\n", rint(+11.5)); /* Mitte zwischen zwei Ganzzahlen */
    printf("+12.5 -> %+4.1f\n", rint(+12.5)); /* Mitte zwischen zwei Ganzzahlen */
    /* Aktuelle Rundungsrichtung speichern. */
    int curr_direction = fegetround();
    /* Aktuelle Rundungsrichtung temporär ändern. */
    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));
    /* Standard-Rundungsrichtung wiederherstellen. */
    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

Referenzen

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

Siehe auch

rundet auf eine Ganzzahl unter Verwendung des aktuellen Rundungsmodus
(Funktion)
(C99) (C99) (C99) (C99) (C99) (C99) (C99) (C99) (C99)
rundet auf eine Ganzzahl unter Verwendung des aktuellen Rundungsmodus mit
Ausnahme, falls das Ergebnis abweicht
(Funktion)
C++-Dokumentation für fegetround , fesetround