float与double的范围和精度

使用boost库中的multiprecision模块提供的float128类型,可以在C++中表示高精度浮点数 需要注意的是,由于float128类型比普通的浮点类型要占用更多的内存,所以在进行大量计算时可能会影响程序的性能。但是,由于float128可以表示的精度远高于普通浮点数,因此在需要高精度计算的场合下,它是一个很好的选择。在主函数中,我们声明了两个float128类型的变量x和y,分别初始化为1.23和-4.56e-7。然后,我们使用cout语句打印出这两个变量的值。接着,我们定义了另外两个float128类型的变量z和w,分别计算了x + y和sqrt(x + y)的值,并将结果打印到控制台上。 阅读详情

1 范围
float和double的范围是由指数的位数来决定的。

float的指数位有8位,而double的指数位有11位,分布如下:

float:共32位

1bit(符号位)
8bits(指数位)
23bits(尾数位)



double:共 64位

1bit(符号位)
11bits(指数位)
52bits(尾数位)



于是,float的指数范围为-127~+128,而double的指数范围为-1023~+1024,并且指数位是按补码的形式来划分的。其中负指数决定了浮点数所能表达的绝对值最小的非零数;而正指数决定了浮点数所能表达的绝对值最大的数,也即决定了浮点数的取值范围。

float的范围为-2^128 ~ +2^128,也即-3.40E+38 ~ +3.40E+38;double的范围为-2^1024 ~ +2^1024,也即-1.79E+308 ~ +1.79E+308。

2 精度
float和double的精度是由尾数的位数来决定的。浮点数在内存中是按科学计数法来存储的,其整数部分始终是一个隐含着的“1”,由于它是不变的,故不能对精度造成影响。

float:2^23 = 8388608,一共七位,这意味着最多能有7位有效数字,但绝对能保证的为6位,也即float的精度为6~7位有效数字;

double:2^52 = 4503599627370496,一共16位,同理,double的精度为15~16位。

boost::multiprecision模块中float128相关的测试代码 如果需要使用更高的精度来表示浮点数,可以使用boost::multiprecision模块中提供的float128类型。float128可以表示比double更多的位数和更大的值范围,但是其精度相对于double仍然存在一定误差。在上述代码中,我们先定义两个float128类型的变量f1和f2,并分别赋值为1.23和4.56。总之,在使用boost::multiprecision模块中的float128类型时,需要仔细考虑其精度和计算误差,并编写相应的算法以避免舍入误差的影响。 阅读详情

相关推荐

C++浮点型变量的存储方式

1 浮点类型简介 浮点型是C++定义的基本类型。类型float、double和long double分别表示单精度浮点数、双精度浮点数和扩展精度浮点数。在Visual Studio中,float类型用4个字节表示,double和long double用8个字节表示。 默认的浮点字面值常量为double类型。在数值的后面加上F或者f表示单精度,在数值后面加上L或者l表示扩展精度。 fl...

hou09tian的博客 4754

float和double精度

float与double的范围和精度 1 范围 float和double的范围是由指数的位数来决定的。 float的指数位有8位,而double的指数位有11位,分布如下: float:共32位 1bit(符号位) 8bits(指数位) 23bits(尾数位) double:共 64位 1bit(符号位) 11bits(指数位) 52...

墨尔本,晴 948

STM32串口DMA双缓冲机制实战:提升数据传输效率的终极方案

本文深入解析了STM32串口DMA双缓冲机制的核心原理与实战配置。通过对比传统中断方式,阐述了双缓冲如何实现数据接收与处理的“无缝接力”,从而在工业传感器数据采集等高负载场景下,将CPU占用率降至极低水平并彻底避免数据丢失。文章提供了基于标准外设库的详细配置步骤、中断处理逻辑及性能实测数据,是提升嵌入式系统串口通信效率和可靠性的终极方案。

weixin_29192365的博客 80

c/c++ float和double的表示范围详细解析

**float范围:** 最小负数-2\*2^127 最大负数-1\*2^(-126),0 最小正数 1\*2^(-126) 最大正数2\*2^(127)。 **double范围:** 负数:(-1.7976931348623157E+308,-4.94065645841246544E-324); 零:0 ; 正数:(4.94065645841246544E-324,1.7976931348623157E+308)。 即绝对值为0和2\^1022——2^1024。

weixin_38597669的博客 1万+

CentOS 7升级GCC踩坑记:明明装了centos-release-scl,为啥找不到devtoolset-9-gcc-c++?

本文详细记录了在CentOS 7系统中升级GCC时遇到的`devtoolset-9-gcc-c++`不可用问题及其解决方案。通过分析`centos-release-scl`安装不完整的原因,提供了从清理残留、重新安装仓库配置到完整安装devtoolset-9工具链的全套操作指南,帮助开发者彻底解决类似环境配置难题。

weixin_29252171的博客 244

针对中文CLIP模型训练失效的解决方案记录

解决了中文CLIP模型无法正确训练的问题

weixin_45906434的博客 1621

double和float的精度和取值范围

(1)占用字节不同 float占4个字节(32位)内存空间,其数值范围为3.4E-38~3.4E+38。 double占8 个字节(64位)内存空间,其数值范围为1.7E-308~1.7E+308。 (2) float只能提供七位有效数字。 double可提供16位有效数字。 float的范围 2^-128到 2^127 ...

liyang_nash的专栏 4万+

QT绘制饼图+柱状图+折线图

使用qt绘制,折线图,饼图,柱状图,多柱状图

梅山 3878

C语言中关于float、double、long double精度及数值范围理解

1. 范围   float和double的范围是由指数的位数来决定的。   float的指数位有8位,而double的指数位有11位,分布如下:   float:   1bit(符号位) 8bits(指数位) 23bits(尾数位)   double:  1bit(符号位) 11bits(指数位) 52bits(尾数位)   于是,float的指数范围为-127~+128,而double的指数范围...

MyDriverC 3万+

深入C6678启动流程:从BootRom参数表到多核镜像部署的完整解析

本文深入解析TMS320C6678 DSP的启动流程,从BootRom参数表到多核镜像部署的全过程。详细介绍了七种启动模式的工程选择、多核镜像构建技巧以及二级引导策略,帮助开发者掌握C6678的启动机制与调试方法,提升嵌入式系统开发效率。

weixin_30505225的博客 612

【电机应用控制】——步进电机控制原理(四相五线/两相四线/细分驱动)&驱动器&梯形/S形加减速算法&直线/圆弧插补

步进电机是一种把电脉冲信号转换为角位移(左)或线位移(右)的电动机。两相通常1.8°,三相通常1.2°、无相通常0.72°,角位移=脉冲个数X步距角。在非超载且不超频的情况下,电机的旋转位置只取决于脉冲个数,转速只取决脉冲信号的频率。所以只需要统计脉冲个数和频率,不再需要编码器测速和位置,具有优秀的开环能力,当然也可接编码器反馈速度和位置数据,实现更加精准的闭环控制。永磁式动态性能好,输出力矩大,但步距角大通常7.5°;反应式(磁阻式)结构简单成本低,步距角小一般1.2°,但振动噪音大动态性能差;

weixin_51658186的博客 5万+

准确详解:C/C++ float、double数据类型的表示范围及精度

今天复习C++遇到了float、double数据类型的表示范围及精度问题,花费了一些时间重新梳理了一遍,鉴于网上很多文章写的并不清晰,并且有不少疏漏错误之处,特结合个人理解仔细整理如下。 要弄清楚这个问题,首先要搞清楚浮点数在内存中的存储方式。浮点数,区别于定点数,指的是小数点位不确定的的数据类型,其原理是将一个浮点数a用两个数m(尾数)和e(指数)来表示:a = m × b^e。其...

black_kyatu的博客 4万+

k8s问题处理

执行 kubectl api-resources 报错如下。

weixin_40548182的博客 944

关于float/double的取值范围、精度和表示

https://blog.youkuaiyun.com/shenziheng1/article/details/79471340 1.float和double的范围和精度         float和double的范围是由指数的位数来决定的。float的指数位有8位,而double的指数位有11位,分布如下: float:1bit(符号位)+8bits(指数位+23bits(尾数位) double:1bi...

sunweiliang的博客 4万+

开关电源和线性电源Multisim电路仿真实验汇总——硬件工程师笔记

本文系统介绍了稳压电源的基础知识与应用实验。首先阐述了稳压电源的定义与类型,包括线性稳压电源(如LM7805/7905)和开关稳压电源(降压/升压/升降压式)的工作原理、参数特点及优劣势。随后详细讲解了各类稳压电源的实验设计,如线性稳压电源的电路实现、开关稳压电源的PWM控制方法等。最后汇总了硬件工程师相关的笔试面试资源,涵盖器件知识、电路仿真、企业真题等内容。全文结合理论分析与Multisim仿真,为电子工程学习者提供了稳压电源的实用技术参考。

XU157303764的博客 1640

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

Java中float/double取值范围与精度

Java浮点数浮点数结构  要说清楚Java浮点数的取值范围与其精度,必须先了解浮点数的表示方法,浮点数的结构组成,之所以会有这种所谓的结构,是因为机器只认识01,你想表示小数,你要机器认识小数点这个东西,必须采用某种方法,比如,简单点的,float四个字节,前两个字节表示整数位,后两个字节表示小数位(这就是一种规则标准),这样就组成一个浮点数。而Java中浮点数采用的是IEEE 754标准。IEE

a327369238的专栏 8万+

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

java double 精度范围_float 和 double 范围和精度

做java已经有段时间了,可是遇到什么范围啊,精度啊就迷糊,虽然自己经常使用,自己的数据也从未超过int型的范围,但还是多了解下,用着才放心嘛……1. 范围float和double的范围是由指数的位数来决定的。float的指数位有8位,而double的指数位有11位,分布如下:float:1bit(符号位) 8bits(指数位) 23bits(尾数位)double:1bit(符号位) 11bits...

weixin_31861647的博客 3668

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

java float和double类型的表示范围和精度

转载自张小琦的博客[https://blog.youkuaiyun.com/zq602316498/article/details/41148063] 隐约记得,浮点数判断大小好像有陷阱,因为底层的二进制数不能精确表示所有的小数。有时候会产生让人觉得莫名其妙的事情。 如在java中, 0.99999999f==1f //true 0.9f==1f //false 要明白这些,首先要搞清楚float和do...

tinysakura的博客 5157

C语⾔中关于float、double精度及数值范围

对于单精度浮点数(float)来说,符号位⼀位,指数位8位,尾数23位。指数能够表⽰的指数范围为-128~127。尾数为23位。 float和double的精度是由尾数的位数来决定的。浮点数在内存中是按科学计数法来存储的,其整数部分始终是⼀个隐含着的“1”,由于它是不变的,故不能对精度造成影响。float:2^23 = 8388608,⼀共七位,这意味着最多能有7位有效数字,但绝对能保证的为6位,也 即float的精度为6~7位有效数字;double:2^52 = 4503599627370496,⼀共16

prohub的博客 3967

关于Java float和double精度范围大小

按道理最大值应该是(2^128)*(2-2^(-23))=2^129-2^105=6.81*10^38,但是一般书上说的都是3.40*10^38,那么问题又来了,为什么会大了2倍?排除掉所有出书的人抄来抄去的行为导致所有的书都错了这个因素,那么剩下的只能是上面某个地方出了问题。首先,回到上面那个我加粗的规格化上去(我个人觉得完全可以用一般情况来代替这个词),仔细想想,假如所有的数都是上面那种规格化表示的时候:第一:得到的数永远是(1.M)乘以一个数,指数部分是不会为0的,那么0怎么表示?

yygr的博客 1121
上一篇: ubuntu自动挂载NTFS的方法
下一篇: java正则表达式
ppby2002
博客等级 码龄23年 65粉丝 104原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值