七、常见数据类型
7.1 rational
有理数(分数)
boost.rational实现了有理数,补充了c++的概念。它基于内建整型,运算时没有精度丢失。
rational使用boost命名空间,为了使用rational的组件则需要包含<boost/rational.hpp>。
-
创建与赋值
#include <iostream> #include <boost/rational.hpp> //using namespace std; using namespace boost; //using namespace boost::assign; int main() { //有理数 rational<int> a(0); std::cout<<a<<std::endl; rational<int> b(1,2); std::cout<<b<<std::endl; b = 0x21; std::cout<<b<<std::endl; b.assign(3,5); std::cout<<rational_cast<double>(b)<<std::endl; std::cin>>b;//支持标准输入但是不允许/左右出现空白字符,用户输入格式为a/b std::cout<<b<<std::endl; std::cout<<abs(b)<<std::endl;//支持标准库的abs,因为重载了 std::cout<<pow(rational_cast<double>(b),2)<<std::endl;//需要转化为double才可以用于pow/cos/sqrt等 std::cout<<sqrt(rational_cast<double>(b))<<std::endl; std::cout<<cos(rational_cast<double>(b))<<std::endl; return 0 ; }
-
异常:bad_rational
#include <iostream> #include <boost/rational.hpp> //using namespace std; using namespace boost; //using namespace boost::assign; int main() { rational<int64_t> c(1,2), d;//d调用空参构造生成0,c调用两个参数的构造函数生成1/2 //int64_t将会提供最小精度1.0842e-19,最大精度为1/1.0842e-19 try { std::cout<<c.numerator()<<"---"<<c.denominator()<<std::endl;//c的分子分母 c/d; } catch (bad_rational &e) { std::cout<<e.what()<<std::endl; } return 0 ; }
7.2 crc(循环冗余校验码)
两个常用的crc校验码:crc_basic(仅用于理论研究),crc_optimal作为常见讨论类型。
7.2.1 crc_optimal
预定义crc_16_type,crc_ccitt_type,crc_xmodem_type和crc_32_type。