Mam aliasy dla radianów i stopni, które używają float jako typ pamięci.
Kiedy конвертирую między tymi dwoma jednostkami, widzę, że montaż zwiększa wartości do podwójnych, a następnie ponownie do pływających po wykonaniu przekształceń.
Pytanie: Jak mogę upewnić się, że wszystkie operacje i konwersji pozostają w pływających wartościach?
Mój Kod:
using radians_f = boost::units::quantity<boost::units::si::plane_angle, float>;
using degrees_f = boost::units::quantity<boost::units::degree::plane_angle, float>;
degrees_f to_degrees(const radians_f& angle) { return static_cast<degrees_f>(angle); }
radians_f to_radians(const degrees_f& angle) { return static_cast<radians_f>(angle); }
W eksploratorze kompilatora widzę następujące instrukcje montażu: https://godbolt.org/z/Gnjr54dn6
cvtss2sd - Konwertuje wartość zmiennoprzecinkową pojedynczej precyzji w argumencie źródłowym "konwersji z" w wartości zmiennoprzecinkowych podwójnej precyzji w argumencie docelowym.
mulsd - Mnoży wartość zmiennoprzecinkowa niskie podwójnej precyzji w drugim argumencie źródłowym na wartość zmiennoprzecinkowa niskie podwójnej precyzji w pierwszym argumencie źródłowym.
cvtsd2ss - Konwertuje wartość zmiennoprzecinkowa podwójnej precyzji w argumencie źródłowym "konwersji z" w wartości zmiennoprzecinkowych pojedynczej precyzji
PS: nie zdziwię się, jeśli źle określił swoje pseudonimy lub/i funkcji konwersji.