boost之multiprecision
multiprecision
boost中提供的高精度库,支持高精度整型,浮点型等。并且提供统一的接口模板,只需要指定对应的后端类型即可实现对应类型的高精度计算:
boost::multiprecision::number<XX_backend>
cpp_int_backend
提供高精度整型后端类型,需引入头文件#include <boost/multiprecision/cpp_int.hpp>:
template <unsigned MinBits = 0,
unsigned MaxBits = 0,
cpp_integer_type SignType = signed_magnitude,
cpp_int_check_type Checked = unchecked,
class Allocator = std::allocator<limb_type> >
class cpp_int_backend;
- MinBits:底层整型占用的最少位宽
- MaxBits:底层整型占用的最大位宽
- SignType:有符号整型还是无符号整型(任意精度的整型只能为signed!)
- Checked:当发生数值溢出,从字符串转换失败,对负数进行位运算是否抛出异常
- Allocator:内存分配器,当MinBits==MaxBits时,定义为void,表示不需要动态内存分配
cpp_int中无符号型用二进制补码表示,有符号型用原码表示,并且额外用一位来表示符号;不允许任意精度的无符号整型也是因为二进制补码表示需要基于定长的精度。
cpp_int使用示例
有符号数为原码表示,并且额外用一个位表示符号:
int main() {
std::cout << "uint128 max: " << std::numeric_limits<boost::multiprecision::uint128_t>::max() << std::endl;
std::cout << "int128 max: " << std::numeric_limits<boost::multiprecision::int128_t>::max() << std::endl;
std::cout << "int128 min: " << std::numeric_limits<boost::multiprecision::int128_t>::min() << std::endl;
return 0;
}

当有符号数转换为无符号数,先是按位截断,再对无符号数的二进制补码求负数:
int main() {
auto s = std::numeric_limits<boost::multiprecision::int128_t>::min();
auto u = (boost::multiprecision::uint128_t)s;
std::cout << "s: " << s << std::endl;
std::cout << "u: " << u << std::endl;
return 0;
}

boost之multiprecision的更多相关文章
- 浮点运算与boost.multiprecision
在C++中,float占4个字节,double占8个字节,均采用 IEEE 754 浮点标准:内部都是以二进制为基础,表述实数,有些实数可以被精确表述,比如0.2,但有些不行,比如0.3.针对这一点, ...
- Boost 1.61.0 Library Documentation
http://www.boost.org/doc/libs/1_61_0/ Boost 1.61.0 Library Documentation Accumulators Framework for ...
- boost库的安装,使用,介绍,库分类
1)首先去官网下载boost源码安装包:http://www.boost.org/ 选择下载对应的boost源码包.本次下载使用的是 boost_1_60_0.tar.gz (2)解压文件:tar - ...
- C++ Boost库分类总结
c# 程序员写c++,各种不适应.尤其是被内存操作和几十种字符串类型的转换,简直疯了,大小写转换竟然要手动写代码实现. Boost看介绍不错,也不知道能不能跨平台.过几天要上linux写c++, 也不 ...
- 在Visual Sutdio 2017中使用boost库
在Visual Sutdio 2017中使用boost库 转载 https://blog.csdn.net/u011054333/article/details/78648294 对C++有一 ...
- boost强分类器的实现
boost.cpp文件下: bool CvCascadeBoost::train( const CvFeatureEvaluator* _featureEvaluator, int _numSampl ...
- Boost信号/槽signals2
信号槽是Qt框架中一个重要的部分,主要用来解耦一组互相协作的类,使用起来非常方便.项目中有同事引入了第三方的信号槽机制,其实Boost本身就有信号/槽,而且Boost的模块相对来说更稳定. signa ...
- 玩转Windows服务系列——使用Boost.Application快速构建Windows服务
玩转Windows服务系列——创建Windows服务一文中,介绍了如何快速使用VS构建一个Windows服务.Debug.Release版本的注册和卸载,及其原理和服务运行.停止流程浅析分别介绍了Wi ...
- boost::function的用法
本片文章主要介绍boost::function的用法. boost::function 就是一个函数的包装器(function wrapper),用来定义函数对象. 1. 介绍 Boost.Func ...
随机推荐
- Python实现加密的RAR文件解压(密码已知)
博主之前在网上找了很多资料,发现rarfile库不能直接调用,需要安装unrar模块,下面将详细介绍整个实现流程. 第一步:安装unrar模块,直接pip install unrar可能会找不到库,需 ...
- Java反射库介绍
本文主要罗列了Java反射中使用比较多的一些方法,主要都是来自 java.lang.reflect包下的Field.Method 和 Constructor 等三个类,希望对大家有帮助!! 介绍 ja ...
- C#开发PACS医学影像处理系统(十三):绘图处理之病灶测量
接上一篇文章,当我们可以绘制图形标记后,就可以在此操作类上面进行扩展, 比如测量类工具,目前整理出的常用绘图和测量功能如下: 测量工具类:(图形标记类请参考本系列文章:绘图处理之图形标记) 功能 说明 ...
- Linux下rm操作误删恢复
1.查看被误删的分区 df /home/Java/... 一直到刚刚被误删的文件的路径下 2.在debugfs打开分区 open /dev/ssl 最好这个分区可能不一样,根据上 ...
- java注解(1)
Java注解是附加在代码中的一些元信息,用于一些工具在编译.运行时进行解析和使用,起到说明.配置的功能.注解不会也不能影响代码的实际逻辑,仅仅起到辅助性的作用.注解是Java SE5中引入的重要的语言 ...
- CentOS 正在连接 127.0.0.1:8118... 失败:拒绝连接。
今天centos使用wget下载东西的时候出现了 看下是否开启了代理 yicunyiye@yicunyiye:~/redis$ export | grep -i proxy declare -x ft ...
- 获取NX装配结构信息
最近在做一个项目,需要获取NX装配结构信息,这里把代码分享给大家,希望对各位有帮助,注意以下几点: 1)代码获取了PART的属性.表达式等,因此一些细节可能需要您根据实际情况修改. 2)读写XML用的 ...
- 智慧矿山-选矿工艺数字 3D 可视化
前言 现代科技和工业的发展对矿物原料的要求越来越高,直接开采的原矿石往往达不到标准,而原矿通过选矿加工后则可以满足要求.选矿技术在冶金.煤炭.化工.建材和环保等部门都得到应用,对国民经济的发展意义重大 ...
- Optimisation
https://www.cnblogs.com/wuyudong/p/writing-efficient-c-and-code-optimization.html 1 不要过多使用 stack ,尽量 ...
- [Vue warn]: Error in render: "TypeError: Cannot read property 'matched' of undefined" found in <App> at src/App.vue
当用Vue模块化开发时,输入 http://localhost:8080 页面没有显示,首先按F12,检查是否有如下错误 话不多说,直接看下面: 解决方法1 如果是上面出的问题,以后就要注意了哦, ...