C++大法:举世闻名之BOOST大法精华浅析(七)rational和crc简述(小白piao分享)

七、常见数据类型

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。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小白piao

创作不易,支持一下!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值