簡體   English   中英

增強單位的平方根scaled_unit

[英]square root of boost units scaled_unit

我使用boost::units來處理項目中的單位。

我創建了一個縮放單元來存儲微米:

using namespace boost::units;
typedef make_scaled_unit<si::length,
                         scale<10, static_rational<-6> > >::type micro_meter_unit;

一切都按預期工作:

quantity<si::length, double> some_meter = 10 * si::meter;
quantity<micro_meter_unit, double> some_mu_meter = 
  static_cast<quantity<micro_meter_unit, double>>(some_meter);

std::cout << "some_meter^2 = " << some_meter * some_meter;  // outputs 100 m^2
std::cout << "some_mu_meter^2 = " << some_mu_meter * some_mu_meter; // outputs 1e+014 p(m^2)

然而,平方根操作未編譯:

std::cout << "sqrt(some_meter) = " << sqrt(some_meter); // outputs 3.16228 m^(1/2)
std::cout << "sqrt(some_mu_meter) = " << sqrt(some_mu_meter); //error here
// 'value' : is not a member of 'boost::units::scale_dim_tag'
// ...
// see reference to class template instantiation 
// 'boost::units::root_typeof_helper<X,Y>' being compiled
//with
//[
//  X=boost::units::quantity<pds::ssp::micro_meter_unit,double>,
//  Y=boost::units::static_rational<2>
//]

如何以正確的方式定義縮放單元以執行平方根和其他操作?

看了一下后,我認為這是一個錯誤。

文檔表明make_scaled_unit的動機是system / si / prefixes.hpp中的前綴

例如:

BOOST_UNITS_METRIC_PREFIX(-9, nano);
BOOST_UNITS_METRIC_PREFIX(-6, micro);
BOOST_UNITS_METRIC_PREFIX(-3, milli);

//! The define uses a dimensionless unit to make a scale unit
#define BOOST_UNITS_METRIC_PREFIX(exponent, name)                                                       \
typedef make_scaled_unit<dimensionless, scale<10, static_rational<exponent> > >::type name ## _type;\
BOOST_UNITS_STATIC_CONSTANT(name, name ## _type)

然后使用它們:

quantity<si::length, double> mu_meter( 1.0 * si::micro * si::meter );

我們的想法是將輸入轉換為底層系統的長度類型,然后處理這些數量,並且只在需要輸出時擔心轉換。

似乎很可能在圖書館的測試覆蓋范圍內錯過了以其他方式使用這種縮放單位。 你應該將它發布到boost trac:

https://svn.boost.org/trac/boost/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM