을 유지하는 방법 단위 변환을 부스트::단위에서 정밀 떠?

0

질문

나는 별칭을 위해율도를 사용하는 부유물로 저장소 유형입니다.

로 변환할 때 이러한 두 단위조회 가치를 증진을 복식과 다시 뜬 경우 하고 있습니다.

Q: 고 있는지 어떻게 확인할 수 있는 모든 작업 및 변환 시설에 뜨는?

나의 코드:

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); }

에서 탐색기를 컴파일러가 다음과 같은 어셈블리의 지침: https://godbolt.org/z/Gnjr54dn6

  • cvtss2sd -로 변환하는 단 하나의 정밀 부동 소수점 값에"전환하는지에서"원본 연산자를 더 정밀 부동 소수점에 값을 대상 피연산자가 있습니다.

  • mulsd -곱하의 낮은 두-정밀 부동 소수점에서 값의 두 번째 소스 연산자에 의하여 낮은 두 정밀 부동 소수점에 값을 먼저 소스 연산자.

  • cvtsd2ss -로 변환하 double-정밀 부동 소수점에 값을"변환-에서"원본 연산자를 하나의 정밀 부동 소수점 값

PS:나는 놀라지 않을 것이 있을 경우 정의 내 별칭 및/또는 나의 변환 기능이 잘못되었습니다.

boost boost-units c++ c++14
2021-11-23 10:02:53
1

최고의 응답

1

내가 찾은 해키 해결 방법(는 나는 확실히 될 수 있습니다"productionized"에 의해 만들 부스트 단위로 계산 57.x 당도 radian 정)을 피하기 전환에서 double하지만 그것이 정말 사실을 강조하는 부위를 일으키는 다른 놀라운 종류의 오버헤드:메모리드 저장하는 필요하지 않는 경우 사용 float 직접,또는 당신의 자신의 래퍼 float.

Demo: https://godbolt.org/z/afPE7baxT

하는 동안 그래서 위의 하나 보여줍니다(정제)방법을 강제로 계산하여 유로 뜨는 경우,당신의 질문은"어떻게 내가 피 오버헤드"당신은 여전히 지금은 핵심입니다.

2021-11-23 10:46:36

불행하게도를 사용하여 각도 했 재현 가능한 최소한의 예에는 질문에"나는 어떻게 피 오버헤드"이 문제에 적용하는 많은 다른 단위는 내가 필요합니다.
CJCombrink

@CJCombrink:그래,무슨 말인가 하는 것 같을 피하(모든)오버헤드가 필요할 수 있습니다 버리고 후원 단위를 기반으로,데모했다.
John Zwinck

는 소멸자 또는 복사본을 생성자에서 래퍼이 발생할 수 있습니다 suboptimality.
n. 1.8e9-where's-my-share m.

다른 언어로

이 페이지는 다른 언어로되어 있습니다

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................