开门见山

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。

精度:

  • float和double的精度是由尾数的位数来决定的;
  • 浮点数在内存中是按科学计数法来存储的,其整数部分始终是一个隐含着的“1”,由于它是不变的,故不能对精度造成影响;
  • float:2^23 =8388608,共七位,意味着最多能有7位有效数字,但绝对能保证的为6位,也即float的精度为6~7位有效数字;
  • double:2^52 = 4503599627370496,一共16位,同理,double的精度为15~16位。

原因

float:1bit(符号位)+8bits(指数位)+23bits(尾数位);
double:1bit(符号位)+ 11bits(指数位)+ 52bits(尾数位)。
float为例,阶码(指数)用移码来表示,8位移码(偏移量为127) 本来应该可以表示-128-127,但是全0和全1被用来 表示特殊状态的指数 ,所以为-126-127(无符号8位表示0-255,去除全0和1后是1-254,减去偏移量127,就是-126-127)。 这里为什么要使用127来作为偏移量,若使用128 则8位移码表示范围-127~126,由于表示一个大的正数 比一个小的负数更加重要,所以127作为偏移量比较合适。 现在可以计算其表示范围了: 尾数部分的取值范围[1,2),所以最小负数-2*2^127 最大负数-1*2^(-126) 最小正数 1*2^(-126) 最大正数2*2^(127)

可以看下这篇文章链接,文章有些内容错误,多注意下。

c/c++ float和double的表示范围详细解析相关推荐

  1. java中将int转换float_在java中将float和double转换为int时有什么区别?

    我用这些语句来测试 float f=4.35f; int i=(int)(f*100); System.out.println(i); double d=4.35; i=(int)(d*100); S ...

  2. C语言:十六进制(HEX)和浮点类型(float、double)转换

    目录 1.浮点类型转换为十六进制 方法1:用地址用指针 方法2:用共用体 方法3: 使用memcpy 2.十六进制转换为浮点类型 近日在研究Modbus协议的时候遇到这样一个情况:使用ModScan3 ...

  3. linux中double大小,linux 下 float 和 double 精度计算差别

    今天在根据需求写代码时候,偶尔发现linux 下 设置变量类型 float 和double 计算时, 得到的结果是不一样的. 要求: 设定值 = 传入值 * 10 * 122.88 /1000; ca ...

  4. 为什么不能够用unsigned 修饰 float和double

    最近犯了一个错误: 定义变量类型的时候竟然定义了unsigned double的类型.由于编译能够通过,因此一直没有发现这样写会有什么样的问题. 今天一次偶然的测试中发现这些变量的值都是整数.一开始觉 ...

  5. ARM中char、short、int、long、float、double数据类型占多少位

    arm是32位单片机: char:1字节 short:2字节 int:4字节 long:4字节 float:4字节 double:8字节 如果遇到其他单片机,可以用sizeof测量: printf(& ...

  6. float与double的范围和精度

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

  7. C#中对于float,double,decimal的误解

    C#中对于float,double,decimal的误解 原文:C#中对于float,double,decimal的误解 一直很奇怪C#的预定义数据类型中为什么加了一个decimal,有float和d ...

  8. Java中的简单浮点数类型float和double不能够进行精确运算

    在java中,简单的浮点类型float和double是不能够进行运算.我们先看下面的两个程序代码: 代码一: import java.util.Scanner; class Circle { doub ...

  9. java中float和double型数据在赋值时有哪些注意事项?,java语言中float和double类型的数据在编程时的注意事项...

    float和double类型的数据在编程时的需要注意的地方 package execisetest; public class AccuranceTest {     public static vo ...

最新文章

  1. Go并发编程之美-读写锁
  2. 安装 elasticsearch-head
  3. POJ 3104 Drying [二分 有坑点 好题]
  4. 判断两条链表是否交叉,若有交叉,返回交叉节点的指针。
  5. “~/” 代表应用程序根目录的一点误区
  6. Spring boot (1)--- 第一个应用程序helloworld
  7. ES7新特性_介绍--JavaScript_ECMAScript_ES6-ES11新特性工作笔记047
  8. 机器学习-斯坦福:学习笔记7-最优间隔分类器问题
  9. linux grep -v多个关键字,Linux grep 命令详解
  10. Android权限设置引导
  11. EK算法(网络流,最大流)
  12. usb 键盘码表_电脑键盘对应的二进制码表
  13. 无盘服务器bios设置,无盘服务器bios设置
  14. [系统] Linux Iptable (Log) 技巧和实例
  15. 浏览器查看Base64格式的图片
  16. All the python knowledge that I come across
  17. 《HelloGitHub》第 61 期
  18. JavaScript常见面试题
  19. Android ViewPage的使用(一)
  20. 【学习记录】卷积神经网络常用概念

热门文章

  1. input内容改变的触发事件
  2. 局域网IP地址分类方法
  3. veth pair上的两个ip能否ping通?
  4. 苹果手机速度慢_安卓手机打开此选项,手机准流畅
  5. win10或win11任务栏,自动隐藏并且透明化
  6. 【发际线大作战】C++学习记录之数组(发际线-1cm)
  7. Avalon总线(一)Avalon-MM Signals
  8. html设置主图轮播,拼多多怎么设置主图不要轮播?这,都是你想知道的!-奇葩想法...
  9. 淘宝4月推虚假交易新规 违规或受48分重罚
  10. python pdb调试方法