浮点数在计算机中存储方式  http://www.cnblogs.com/jillzhang/archive/2007/06/24/793901.html

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

浮点数的十进制形式是,即十进制的科学计数法: a.xxx *10^n,

而在计算机中是用二进制的科学计数法表示:1.xxx * 2^n(*是二进制乘法 即移位)

指数位用来表示了n,尾数位表示的是小数部分xxx。

比如 8.25 ,二进制 100.01 ->1.0001*2^2

而指数有正负,所以double型最大值是2^1024 =  1.79E+308 ,比64位uint64_t 要大多了 ,这是因为损失了数据精度的:

uint64_t最大值转为double型:64bit的1->1.111(52个)*2^63 (在vs中实际转换后表示成了1.00*2^64,应该是因为最后11个bit 进了一位),

而完整无损失的表示应该是:1.111(52个)111(11个)*2^63

因为double的尾数只有52bit,所以后面的11bit的1是损失了的,整数 (1<<64)-1 到 (1<<64)-1 -( (1<<11) -1) 转换成double时是一样的结果

(vs调试中考虑了四舍五入,(1<<64)-1 到 (1<<64)-1 -( (1<<10) -1 转换结果一样)

也就是说64bit的整数,用double表示,(考虑四舍五入)误差可达1023(即double的分辨率只有1023,或许double a 与 a+1023 相等)

63bit 误差可达511 ....  ,54bit误差可达1,不超过53bit时,用double表示才没有误差。

double精度问题,数据范围的更多相关文章

  1. java float、double精度研究(转)

    在java中运行一下代码System.out.println(2.00-1.10);输出的结果是:0.8999999999999999很奇怪,并不是我们想要的值0.9 再运行如下代码:System.o ...

  2. Java Double 精度问题总结

    package Demo_1.Test_2; import java.math.BigDecimal; /** * @描述:Java Double 精度问题总结 * @详细描述:使用Java,doub ...

  3. Java面试官:兄弟,你确定double精度比float低吗?

    我有一个朋友,叫老刘,戴着度数比我还高的近视镜,显得格外的"程序员":穿着也非常"不拘一格",上半身是衬衣西服,下半身是牛仔裤运动鞋. 我和老刘的感情非常好,每 ...

  4. Java中关于 BigDecimal 的一个导致double精度损失的"bug"

    背景 在博客 恶心的0.5四舍五入问题 一文中看到一个关于 0.5 不能正确的四舍五入的问题.主要说的是 double 转换到 BigDecimal 后,进行四舍五入得不到正确的结果: public ...

  5. Java中double类型的数据精确到小数点后两位

    Java中double类型的数据精确到小数点后两位 多余位四舍五入,四种方法 一: double f = 111231.5585;BigDecimal b = new BigDecimal(f); d ...

  6. double精度的坑与BigDecimal

    近期经常接触支付相关的功能,在开发及测试过程中,开始金额都使用的是double类型,而近期新进的需求存在支付时打折的情况,也就是会出现如 1.23元的情况,那么这时候问题来了,如果是直接使用1.23进 ...

  7. 输入三个double型的数据,放入到a,b,c三个变量中去,使用条件结构与交换逻辑将这三个变量中的值从小到大排列。

    import java.util.Scanner; public class C8{ public static void main(String []args){ /* 8.输入三个double型的 ...

  8. 对double数据类型的数据保留两位小数,并且进行四舍五入

    1.代码如下: /** * 对double数据类型的数据 保留两位小数,并且进行四舍五入 * @author Administrator */ public class Main { // 工具类 p ...

  9. 【Double】double精度问题和int、long除不尽取舍问题

    看了老半天,真心没搞懂,留下几篇文章,后面继续跟进吧.... 一.如何理解double精度丢失问题? - 知乎 https://www.zhihu.com/question/42024389/answ ...

随机推荐

  1. java 反编译和文档生成器

    挺有趣的东西. 代码在上一篇中有. 反编译器javap.exe javadoc.exe制作源文件类结构的html格式文档

  2. linux--基础学习笔记--软件安装

  3. js取当前项目名称

    function getContextPath(){ var path = window.location.href; path = path.substring(0, path.lastIndexO ...

  4. 洛谷 P1896 [SCOI2005]互不侵犯King

    题目描述 在N×N的棋盘里面放K个国王,使他们互不攻击,共有多少种摆放方案.国王能攻击到它上下左右,以及左上左下右上右下八个方向上附近的各一个格子,共8个格子. 输入输出格式 输入格式: 只有一行,包 ...

  5. 一个Public的字段引起的,谈谈继承中的new

    一直觉得对c#面向对象这块已经掌握的很好了,因为正常情况下字段一般我们设计成私有的,今天突然想到一个实验,如下有两个很简单的类: public class Farther { ; public vir ...

  6. Python 字符串、元组、字典转换成列表

  7. .Net连接数据库(AOD.Net)

    用C#实现用户名登录---连接数据库,查询并判断是否存在用户名 一.链接类 1.添加DBConnection类 2构造 public class DBConnection { private stat ...

  8. Android 进度条改变图片透明度

    <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android=&quo ...

  9. FastReport处理空日期

    [IIf([D.ApproveDate]==DateTime.MinValue,"",[D.ApproveDate])]

  10. MyBatis 多表联合查询及优化 以及自定义返回结果集

    下面就来说一下 mybatis 是通过什么来实现多表联合查询的.首先看一下表关系,如图: 这 里,我已经搭好了开发的环境,用到的是 SpringMVC + Spring + MyBatis,当然,为了 ...