(1)取值范围

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

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

float:

1bit(符号位)

8bits(指数位)

23bits(尾数位)

double:

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的精确度是按照整体位数来的,并不是只是考虑小数部分。

float的精度为7~8位有效数字,7位肯定能保证,8位的值也存在。

double的精度为16~17位有效数字

看一段代码

public class Main {public static void main(String[] args) {float f6 = 1.000003f;//6位小数位,总共7位float f7 = 1.0000003f;//7位小数位,总共8位float f8 = 1.00000003f;//8位小数位,总共9位float f_8 = 10.000003f;//6位小数位,总共8位float f_9 = 10.0000003f;//7位小数位,总共9位float f_10 = 10.00000003f;//8位小数位,总共10位double d15 = 1.000000000000003;//15位小数位,总共16位double d16 = 1.0000000000000003;//16位小数位,总共17位double d17 = 1.00000000000000003;//17位小数位,总共18位double d_17 = 10.000000000000003;//15位小数位,总共17位double d_18 = 10.0000000000000003;//16位小数位,总共18位double d_19 = 10.00000000000000003;//17位小数位,总共19位System.out.println("结果为false证明 == 校验到了小数点位, 精确度可信");System.out.println("float(7位有效,6位小数)    1.000003f  == 1           的结果是:" + (f6==1));System.out.println("float(8位有效,7位小数)    1.0000003f == 1           的结果是:" + (f7==1));System.out.println("float(9位有效,8位小数)    1.00000003f  == 1         的结果是:" + (f8==1));System.out.println("float(8位有效,6位小数)    10.000003f  == 10         的结果是:" + (f_8==10));System.out.println("float(9位有效,7位小数)    10.0000003f  == 10        的结果是:" + (f_9==10));System.out.println("float(10位有效,8位小数)   10.00000003f  == 10       的结果是:" + (f_10==10));System.out.println("------------------");System.out.println("double(16位有效,15位小数) 1.000000000000003 == 1    的结果是:" + (d15==1));System.out.println("double(17位有效,16位小数) 1.0000000000000003 == 1   的结果是:" + (d16==1));System.out.println("double(18位有效,17位小数) 1.00000000000000003 == 1  的结果是:" + (d17==1));System.out.println("double(17位有效,15位小数) 10.000000000000003 == 10  的结果是:" + (d_17==10));System.out.println("double(18位有效,16位小数) 10.0000000000000003 == 10 的结果是:" + (d_18==10));System.out.println("double(19位有效,17位小数) 10.00000000000000003 == 10的结果是:" + (d_19==10));}
}

结果为false的,那么小数点存在有意义,也就是精确位

从结果来看,float可以精确到有效数字8位, double到了17位

之所以不能用f1==f2来判断两个数相等,是因为虽然f1和f2在可能是两个不同的数字,但是受到浮点数表示精度的限制,有可能会错误的判断两个数相等!

double和float的精度和取值范围相关推荐

  1. float的精度和取值范围

    文章目录 前言 精度限制 float存储方式 float存储示例 float范围 float精度 float小数 float特殊值 总结 前言 关于float的精度和取值范围这个问题,我查询了很多次, ...

  2. float和double的精度和取值范围计算方法

    C/C++各数据类型大小和取值范围 类型名称 字节数 取值范围 signed char 1 -2^7(-128) ~ 2^7-1(127) unsigned char 1 0 ~ 2^8-1(255) ...

  3. double 转float 损失精度

    (一)32位平台: 分为有符号型与无符号型. 有符号型: short 在内存中占两个字节,范围为-2^15~(2^15-1) int 在内存中占四个字节,范围为-2^31~(2^31-1) long在 ...

  4. C/C++ 各类型int、long、double、char、long long取值范围(基本类型的最大最小值)

    做题的时候经常会使用到数据类型的最大最小值(如int, long, long long, char等),我也查了很多次,这次就记下来当笔记吧. 参考了C++ prime plus.各个博客.教程和c+ ...

  5. double和float计算精度不准的问题

    2019独角兽企业重金招聘Python工程师标准>>> 1.首先我们要知道float和double型,的底层实现是二进制的.十进制中的一个有限位数小数,转换成二进制就不一定是有限位数 ...

  6. float为什么要比Long的取值范围大

    要知道为什么占32bit的float类型却比占64bit的Long类型的取值范围还要大,就要先了解float的存储结构. float的存储结构 符号位(1bit) 指数(8bit) 尾数(23bit) ...

  7. Double 与 Float 的值的比較结果

    首先看geeksforgeeks上的两个程序: 程序1: #include<stdio.h> int main() {float x = 0.1;if (x == 0.1)printf(& ...

  8. double取值范围 java_Java中float/double取值范围与精度

    Java浮点数 浮点数结构 要说清楚Java浮点数的取值范围与其精度,必须先了解浮点数的表示方法,浮点数的结构组成,之所以会有这种所谓的结构,是因为机器只认识01,你想表示小数,你要机器认识小数点这个 ...

  9. float 范围 java_Java中float/double取值范围与精度

    Java浮点数 浮点数结构 要说清楚Java浮点数的取值范围与其精度,必须先了解浮点数的表示方法,浮点数的结构组成,之所以会有这种所谓的结构,是因为机器只认识01,你想表示小数,你要机器认识小数点这个 ...

最新文章

  1. Java学习总结:8
  2. PHP邮件队列,php群发邮件,用数据库做邮件队列
  3. Android源码解析(一)动画篇-- Animator属性动画系统
  4. 听说你想去大厂看学姐,带你看看拼多多运营面经
  5. leetcode-136-只出现一次的数字
  6. dealloc时取weakself引起崩溃
  7. wine mac 中文 方块乱码 解决
  8. html div怎么设置圆角,jquery设置div圆角
  9. chmod ug s oracle,Linux chmod设置目录和文件不同权限
  10. Eclipse RCP中Viewer交互的三种方式/Make your Eclipse applications richer with view linking
  11. canvas 绘制贪吃蛇游戏 1
  12. Baidu 人脸识别FireFly 与PC连接调试
  13. 【matlab小白训练】BP神经网络
  14. 计算机图形学 参数曲线和曲面的相关知识点
  15. 设置计算机网络文件共享,局域网电脑文件共享怎么设置
  16. BigDATA面试题
  17. 蓝字冲销是什么意思_会计记账,贷方红字,贷方蓝字什么意思
  18. 片上总线Wishbone 学习(二)Wishbone总线标准介绍
  19. springboot Nexus Repository Maven仓库搭建及使用
  20. python 递归,迭代器,生成器,面向过程编程

热门文章

  1. npm使用国内淘宝镜像
  2. FPS 游戏:快速寻找基址的方法
  3. 使用Weka进行K-近邻算法和K-均值算法的使用
  4. IOS xcode使用自带模板Tab bar Controller创建主页
  5. 解决Spyder3闪崩的问题
  6. Spring中的事务传播行为
  7. golang 扇入扇出以及通知退出机制
  8. 第二章 2.5 随机变量的函数的分布
  9. Python-Web后端框架:Flask
  10. 什么是动态语言/静态语言