#defineBOOST_RATIO_OVERFLOW_IN_ADD"overflow in ratio add"#defineBOOST_RATIO_OVERFLOW_IN_SUB"overflow in ratio sub"#defineBOOST_RATIO_OVERFLOW_IN_MUL"overflow in ratio mul"#defineBOOST_RATIO_OVERFLOW_IN_DIV"overflow in ratio div"#defineBOOST_RATIO_NUMERATOR_IS_OUT_OF_RANGE"ratio numerator is out of range"#defineBOOST_RATIO_DIVIDE_BY_0"ratio divide by 0"#defineBOOST_RATIO_DENOMINATOR_IS_OUT_OF_RANGE"ratio denominator is out of range"
В зависимости от используемой системы статического утверждения, намек на отказное утверждение появится в той или иной форме в диагностическом выходе компилятора.
Этот заголовок содержит форвардные декларации для файла<<boost/ratio/ratio.hpp>>.
namespaceboost{template<boost::intmax_tN,boost::intmax_tD=1>classratio;// ratio arithmetictemplate<classR1,classR2>structratio_add;template<classR1,classR2>structratio_subtract;template<classR1,classR2>structratio_multiply;template<classR1,classR2>structratio_divide;#ifdefBOOST_RATIO_EXTENSIONStemplate<classR,intP>structratio_power;template<classR>structratio_negate;template<classR>structratio_sign;template<classR>structratio_abs;template<classR1,classR2>structratio_gcd;template<classR1,classR2>structratio_lcm;#endif// ratio comparisontemplate<classR1,classR2>structratio_equal;template<classR1,classR2>structratio_not_equal;template<classR1,classR2>structratio_less;template<classR1,classR2>structratio_less_equal;template<classR1,classR2>structratio_greater;template<classR1,classR2>structratio_greater_equal;// convenience SI typedefstypedefratio<1LL,1000000000000000000LL>atto;typedefratio<1LL,1000000000000000LL>femto;typedefratio<1LL,1000000000000LL>pico;typedefratio<1LL,1000000000LL>nano;typedefratio<1LL,1000000LL>micro;typedefratio<1LL,1000LL>milli;typedefratio<1LL,100LL>centi;typedefratio<1LL,10LL>deci;typedefratio<10LL,1LL>deca;typedefratio<100LL,1LL>hecto;typedefratio<1000LL,1LL>kilo;typedefratio<1000000LL,1LL>mega;typedefratio<1000000000LL,1LL>giga;typedefratio<1000000000000LL,1LL>tera;typedefratio<1000000000000000LL,1LL>peta;typedefratio<1000000000000000000LL,1LL>exa;#ifdefBOOST_RATIO_EXTENSIONS// convenience IEC typedefstypedefratio<1024LL>kibi;typedefratio<1024LL*1024LL>mebi;typedefratio<1024LL*1024LL*1024LL>gibi;typedefratio<1024LL*1024LL*1024LL*1024LL>tebi;typedefratio<1024LL*1024LL*1024LL*1024LL*1024LL>pebi;typedefratio<1024LL*1024LL*1024LL*1024LL*1024LL*1024LL>exbi;#endif}
<ratio>является средством, которое полезно для определения рациональных констант времени компиляции. Компиляционно-временная рациональная арифметика поддерживается защитой от переполнения и деления на ноль. Такая установка очень удобна для эффективного представления 1/3 наносекунды или для указания дюйма с точки зрения метров (например, 254/10000 метров - что<ratio>сократится до 127/5000 метров).
Диагностика испускается, если<ratio>инстанцируется<D==0>, или если абсолютное значение<N>или<D>не может быть представлено.Примечание:Эти правила гарантируют, что можно избежать бесконечных соотношений и что для любого отрицательного входа существует репрезентабельное значение его абсолютного значения, которое является положительным. В представлении двух комплементов это исключает самое отрицательное значение.
Члены num и den будут нормализованными значениями шаблонных аргументов N и D, вычисленных следующим образом. Пусть<gcd>обозначает наибольший общий делитель абсолютной величины<N>и абсолютной величины<D>. Тогда:
<num>имеет значение<sign(N)*sign(D)*abs(N)/gcd>.
<den>имеет значение<abs(D)/gcd>.
Вложенный типдеф<type>обозначает нормализованную форму этого<ratio>типа. Он должен использоваться, когда требуется нормализованная форма аргументов шаблона, поскольку аргументы не обязательно нормализуются.
Два<ratio>класса<ratio><N1>и<ratio><N2>D2>D2>имеют такую же нормализованную форму, если<ratio><N1>::D1>::типявляется тем же типом, что и<
Для каждого из шаблонов классов в этом разделе каждый параметр шаблона относится к<ratio>. Если реализация не может сформировать указанный<ratio>из-за переполнения, будет выдана диагностика.
Международная система единицопределяет двадцать префиксов СИ.Соотношениеопределяет все, кроме<yocto>,<zepto>,<zetta>и<yotta>.
// convenience SI typedefstypedefratio<1LL,1000000000000000000LL>atto;typedefratio<1LL,1000000000000000LL>femto;typedefratio<1LL,1000000000000LL>pico;typedefratio<1LL,1000000000LL>nano;typedefratio<1LL,1000000LL>micro;typedefratio<1LL,1000LL>milli;typedefratio<1LL,100LL>centi;typedefratio<1LL,10LL>deci;typedefratio<10LL,1LL>deca;typedefratio<100LL,1LL>hecto;typedefratio<1000LL,1LL>kilo;typedefratio<1000000LL,1LL>mega;typedefratio<1000000000LL,1LL>giga;typedefratio<1000000000000LL,1LL>tera;typedefratio<1000000000000000LL,1LL>peta;typedefratio<1000000000000000000LL,1LL>exa;
Ниже приведены ограничения Boost. Соотношение относительно спецификации в проекте стандарта C++0x:
Четыре единицы типа SI —<yocto>,<zepto>,<zetta>и<yotta>— должны поддерживаться условно, если позволяет диапазон<intmax_t>, но не поддерживаютсяBoost.Ratio.
Соотношение должно быть статичным<constexprintmax_t>(см.) Значения коэффициентов должны быть constexpr, но для компилятора, не поддерживающего<constexpr>сегодня,Boost.Ratioиспользует<staticconstintmax_t>.
Более стандартный C++, такой как метафункции, применяется к типам соотношений, таким как __static_abs или __static_negate.
Рациональная константа __Boost_Mpl и связанные с ней арифметические и сравнительные специализации __Boost_Mpl, включая __numeric_cast, __plus, __equal_to.
Этот заголовок предоставляет<ratio_string<>>, который может генерировать текстовое представление<ratio<>>в виде<std::basic_string<>>. Эти строки могут быть полезны для ввода/вывода.
Шаблон класса ratio_string предоставляет текстовые представления соответствующего соотношения, соответствующего типу символа charT.
Основной шаблон предоставляет общие строки. Специализации обеспечивают те же статические функции членов, но эти функции возвращают английский префикс SI и названия символов, как указано Генеральной конференцией по весам и мерам.
С компиляторами, поддерживающими char16_t и char32_t, и со стандартной библиотекой, не предоставляющей std::u16string и std::u32string, вам нужно будет определить макросы BOOST_NO_CXX11_U16STRING и BOOST_NO_CXX11_U32STRING до Boost. Config определяет их.
Для каждой специализации таблица дает значение возврата для<prefix()>и<symbol()>.
Table 31.1. The return values of specializations of ratio_string
Рациональная постояннаяявляется классом держателей для значения времени компиляции рационального типа. КаждаяРациональная постояннаятакже является нулевой метафункцией, возвращающейся сама собой. Рациональный постоянный объект неявно преобразуется в соответствующее значение времени выполнения рационального типа.
Статья Reference раздела The Boost C++ Libraries BoostBook Documentation Subset Chapter 31. Boost.Ratio 2.1.0 может быть полезна для разработчиков на c++ и boost.
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.