Ich möchte mit Intervallarithmetik in Rust spielen, und dazu muss ich den Rundungsmodus nach oben oder unten einstellen. Wie ich aus einer Suche verstehe, hat die Einstellung des Rundungsmodus Auswirkungen auf die Leistung. Daher möchte ich sie zur Kompilierzeit einstellen.Kann der Fließkomma-Rundungsmodus zur Kompilierzeit in Rust eingestellt werden?
Antwort
Nicht zuverlässig, nein. Das Problem ist, dass das LLVM-Backend keine Unterstützung für das Modifizieren des Rundungsmodus bietet, obwohl es kürzlich some proposals to fix this gab, wird es wahrscheinlich in naher Zukunft nicht gelöst werden.
Sie könnten in der Lage sein, auf die C fesetround
Funktion rufen (in fenv.h
) zu Beginn des Programms, aber das Problem ist, dass bestimmte Optimierungen (zB konstante Faltung) würden bereits den Standardrundungsmodus ausgeführt wurden unter Verwendung von .
ok. Ich sehe, vielleicht, wenn ich solch eine Optimierung designen kann und die Rundung mit einer Inline-Montage ändern kann, kann ich das Verhalten erreichen, das ich möchte. –
Ich würde 'fesetround' aufrufen, anstatt Assembly zu verwenden: auf x86 gibt es tatsächlich 2 verschiedene Register, die Sie ändern müssen: MXCSR für SSE-Operationen und FPSCR für x87-Operationen. –
Ja, ich muss die beiden Register ändern, aber jetzt stehe ich vor einem anderen Problem, das ich in diesem [post] (http://stackoverflow.com/questions/36789681/which-llvm-passes-are-responsible-for) adressiere - floating-point-optimizations) –
- 1. Kann eine Datei zur Kompilierzeit gelesen werden?
- 2. Können Arrays zur Kompilierzeit indiziert werden?
- 3. Wo werden lokale Variablen zur Kompilierzeit gespeichert?
- 4. Vollständig getippt zur Kompilierzeit
- 5. C++: Kann die virtuelle Vererbung zur Kompilierzeit erkannt werden?
- 6. Fließkomma-Arithmetik zur Kompilierzeit
- 7. Warum überprüft Rust Array-Grenzen zur Laufzeit, wenn (die meisten) anderen Prüfungen zur Kompilierzeit stattfinden?
- 8. Singleton-Initialisierung zur Kompilierzeit
- 9. MediaPlayer.Volume kann nicht eingestellt werden
- 10. Kann der Startbildschirm programmgesteuert eingestellt werden?
- 11. offsetof zur Kompilierzeit
- 12. if/else zur Kompilierzeit?
- 13. Maximaler Speicher, der dynamisch zugeordnet werden kann und zur Kompilierzeit in C++
- 14. self.navigationItem.backBarButtonItem kann nicht eingestellt werden
- 15. Wo kann HttpContext.User eingestellt werden?
- 16. Werden statische Methoden in Java immer zur Kompilierzeit aufgelöst?
- 17. Überprüfung der C-Array-Ausrichtung zur Kompilierzeit
- 18. Wie ein If zur Kompilierzeit in C++
- 19. Label_attr kann nicht in configureOptions eingestellt werden
- 20. Qt - Fehler 2 zur Kompilierzeit
- 21. Force-Variablen von Superklasse zugewiesen werden (zur Kompilierzeit)
- 22. In Firefox/Opera kann der Fokus nicht eingestellt werden
- 23. Wie man Exception zur Kompilierzeit in Java
- 24. Android: XML-Datei zur Kompilierzeit validieren?
- 25. Hinweise zur Beschleunigung der Kompilierzeit in Flex Builder 3?
- 26. So erkennen Sie use_frameworks! zur Kompilierzeit
- 27. Wie können verschiedene Eigenschaften eines Objekts zur Laufzeit eingestellt werden?
- 28. Kann die Größe eines Arrays innerhalb der Struktur zur Laufzeit eingestellt werden?
- 29. Wie injiziere ich C# -Code zur Kompilierzeit?
- 30. Meiste Pythonic Weg, Funktionsmetadaten zur Kompilierzeit zur Verfügung zu stellen?
Wenn Sie wissen, wie, teilen Sie Ihr Wissen mit uns bitte. –
http://www.gnu.org/software/libc/manual/html_node/Rounding.html könnte helfen. Es wird wahrscheinlich auf die Implementierung von C und C++ von gcc zutreffen. Keine Ahnung von Rust oder wie Clang C/C++ implementiert. Beachten Sie die Kommentare am Ende, sowie die Kommentare unter "Runde zum nächsten". – thurizas
Relevant: http://stackoverflow.com/questions/28121957/how-do-i-specify-the-rounding-mode-for- floating-point-numbers – Veedrac