C++ 升压单位的平方根
我使用C++ 升压单位的平方根,c++,boost,C++,Boost,我使用boost::units来处理项目中的单元 我已经创建了一个缩放单位来存储微米: using namespace boost::units; typedef make_scaled_unit<si::length, scale<10, static_rational<-6> > >::type micro_meter_unit; 使用名称空间boost::units; typedef make_scal
boost::units
来处理项目中的单元
我已经创建了一个缩放单位来存储微米:
using namespace boost::units;
typedef make_scaled_unit<si::length,
scale<10, static_rational<-6> > >::type micro_meter_unit;
使用名称空间boost::units;
typedef make_scaled_unit::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)
quantity some_meter=10*si::meter;
数量某些μm=
静态浇铸(一些仪表);
std::cout看了一会儿,我认为这是一个bug
该文档表明,使用make_scaled_单位的动机是为了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)
BOOST\u UNITS\u METRIC\u前缀(-9,nano);
增压单位公制前缀(-6,微);
升压单位,公制前缀(-3,毫);
//! “定义”使用无量纲单位创建比例单位
#定义BOOST\u单位\u度量\u前缀(指数、名称)\
typedef make_scaled_unit::type name###u type\
升压单位静态常数(名称、名称类型)
然后使用如下方法:
quantity<si::length, double> mu_meter( 1.0 * si::micro * si::meter );
数量μm(1.0*si::micro*si::meter);
其思想是将输入转换为基础系统的长度类型,然后处理这些数量,只在需要输出时才考虑转换
在库的测试覆盖范围中,以其他方式使用这样的缩放单元似乎有可能被遗漏。您应该将此信息发布到boost trac:
能否提供一个完整的代码示例,包括所有的include和main
?我很难弄清楚您只是为了让示例代码编译而使用的具体包含单元。@MarkB这里是包含文件列表:\include\include\include\include\include\include\include\code>所有提供的代码都可以放在main
中,我建议考虑避免显式缩放单位。当您可以只使用数量(并在输出上缩放,如果需要)时,使用显式类型的微米数量有什么好处?谢谢。它来自需求。我需要实现与缩放单位一起工作的算法。当然,我可以手动进行缩放,但是缩放单位更方便。看起来这实际上是一个bug。在阅读了make_scaled_unit的动机之后,我希望以下代码能够工作:quantity mu_meter(sqrt(1.0*si::micro*si::meter*si::meter))代码>但它不起作用是的,我不认为这是Steven想要的(它不起作用)。在文档中,有他给出的纳秒级示例。那也不行。这肯定是一个bug。ticket svn.boost.org/trac/boost/ticket/10270包含了解决此问题的方法
quantity<si::length, double> mu_meter( 1.0 * si::micro * si::meter );