Was ist die Verwendung von feholdexcept usw.?

Lesezeit: 2 Minuten

Die Dokumentation (in den Standards) für alle fenv.h ist ziemlich verwirrend, aber ich bin besonders verwirrt darüber feholdexcept und das Konzept des “Non-Stop-Modus” für eine Fließkomma-Ausnahme. Soweit ich das beurteilen kann, sind Ausnahmen bei jeder IEEE-Gleitkommaimplementierung standardmäßig keine Signalisierung / “Non-Stop” und die fenv.h Schnittstellen scheinen keine Möglichkeit zu bieten, einen Signalisierungsmodus zu aktivieren, es sei denn, es war die Standardeinstellung. Ist das ganze Konzept von feholdexcept nutzlos, außer auf Nicht-IEEE-Systemen oder Systemen mit nicht standardmäßigen Erweiterungen zum Einstellen der Signalisierungsausnahmemaske?

Angenommen, Sie implementieren eine Bibliothek und wissen nichts darüber, was Ihre Aufrufer in der Gleitkommaumgebung tun könnten, bevor sie Ihren Code aufrufen. Sie demaskieren möglicherweise eine Ausnahme und installieren einen benutzerdefinierten Trap-Handler, der bewirkt, dass die Division durch Null den Wert 42 erzeugt. Angenommen, Ihre Bibliothek hängt davon ab, dass das standardmäßige IEEE-754-Verhalten für die Division durch Null verwendet wird. Das feholdexcept -Funktion gibt Ihnen die Möglichkeit, dieses Verhalten zu erzwingen. Die Umgebung des Aufrufers, komplett mit seiner unmaskierten Ausnahme, kann dann mithilfe von wiederhergestellt werden fesetenv Funktion.

Dies ist zugegebenermaßen ein ziemlich obskurer Eckfall der Verwendung, aber ehrlich gesagt alles in fenv.h ist für die meisten Programmierer ziemlich obskur.

  • Wenn man bedenkt, dass für die Standardbibliothek, sofern nicht anders dokumentiert, alle Funktionen in der Standard-Gleitkommaumgebung aufgerufen werden müssen, um sich gemäß der Spezifikation zu verhalten, wäre es meiner Meinung nach ziemlich vernünftig, dass Autoren von Drittanbieterbibliotheken auch die Last auf den Aufruf legen Anwendung. Zumal jede Verwendung von fe* Funktionen könnten den Compiler (wenn auch nicht GCC …) dazu veranlassen, Gleitkommaoptimierungen auszulassen, die dazu führen könnten, dass Ausnahmen verloren gehen …

    – R.. GitHub HÖR AUF, EIS ZU HELFEN

    14. Juni 2011 um 4:22 Uhr

  • @R..: Die <fenv.h> Funktionen fehlen im Allgemeinen sowohl im Design als auch in der Dokumentation. Ich würde sogar sagen, dass sie das schwächste Merkmal der C-Bibliothek sind. Wenn Sie Verbesserungsvorschläge haben, gebe ich diese gerne an die C-Gleitkomma-Arbeitsgruppe weiter.

    – Stefan Kanon

    14. Juni 2011 um 6:36 Uhr


1432230cookie-checkWas ist die Verwendung von feholdexcept usw.?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy