Heim > Backend-Entwicklung > C++ > Wie kann ich das Gleitkomma-Rundungsverhalten in C und Assembly portabel anpassen?

Wie kann ich das Gleitkomma-Rundungsverhalten in C und Assembly portabel anpassen?

Linda Hamilton
Freigeben: 2024-11-24 17:34:16
Original
911 Leute haben es durchsucht

How Can I Portably Adjust Floating-Point Rounding Behavior in C and Assembly?

Portables Anpassen des Gleitkomma-Rundungsverhaltens

Die Notwendigkeit, den IEEE 754-Rundungsmodus zu ändern, entsteht in verschiedenen Szenarien. In diesem Artikel werden effiziente Methoden erläutert, um dies zu erreichen, sowohl in portablem C als auch in der x86-Assemblersprache.

C-Lösung

C99 bietet eine umfassende Lösung für die Manipulation von Rundungsmodi:

#include <fenv.h>
#pragma STDC FENV_ACCESS ON

int main() {
  // Preserve the initial rounding mode
  const int roundingMode = fegetround();

  // Set the desired rounding mode (towards zero)
  fesetround(FE_TOWARDZERO);

  // Perform floating-point operations...

  // Revert to the original rounding mode
  fesetround(roundingMode);

  return 0;
}
Nach dem Login kopieren

x86-Montagelösung

Ein Plattformen, die C99 nicht unterstützen, bietet x86-Assembly eine Alternative:

x87-Gleitkomma-Einheit:Verwenden Sie fldcw, um den Rundungsmodus anzupassen.

SSE-Einheit: Verwenden Sie ldmxcsr, um die SIMD-Rundung zu konfigurieren Modus.

MSVC-spezifische Lösung

Microsoft Visual C bietet die nicht standardmäßige _controlfp()-Funktion:

unsigned int roundingMode = _controlfp(0, 0);
_controlfp(_RC_CHOP, _MCW_RC);

// ...

_controlfp(roundingMode, _MCW_RC);
Nach dem Login kopieren

Rundung Moduskonstanten

Die folgende Tabelle enthält eine Referenz für den Rundungsmodus Konstanten:

Rounding Mode C Name MSVC Name
Nearest FE_TONEAREST _RC_NEAR
Towards Zero FE_TOWARDZERO _RC_CHOP
Positive Infinity FE_UPWARD _RC_UP
Negative Infinity FE_DOWNWARD _RC_DOWN

Das obige ist der detaillierte Inhalt vonWie kann ich das Gleitkomma-Rundungsverhalten in C und Assembly portabel anpassen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage