Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/150.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 升压单位的平方根_C++_Boost - Fatal编程技术网

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