public static void main(String[] args)  {double a = 0.1;double b = 0.7;System.out.println(a+b); // 0.7999999999999999System.out.println((int)(a+b)); // 0System.out.println((int)((a+b)*10)); // 7
}

Java 虚拟机规范要求虚拟机实现在处理浮点数时,必须严格遵循  IEEE754 规范中所规定的行为和限制(摘自 jvms10)。

The floating-point types are float and double, which are conceptually associated with the 32-bit single-precision and 64-bit double-precision format IEEE 754 values and operations as specified in IEEE Standard for Binary Floating-Point Arithmetic (ANSI/IEEE Std. 754-1985, New York).

简单说说 IEEE 754

单精度,32 bits

S 为符号位,1 表示 负数,0 表述正数。

  • exp 表示阶码,在计算机用移码表示 ,便用浮点数加减运算时进行对阶操作。其取值为 [1, 254],本来是 [0, 255],但最高位和最低位保留作为特殊值处理 ,±0±∞
  • frac 表示小数部分,其取值 [1.0, 2.0) ,其中 1.xxx 中整数部分的 1 默认省略不写,这样还可以多存一位,提高精度,所以有尾数精度 = 尾数位数 + 1

IEEE754  标准定义的浮点格式参数

特殊值的表示

浮点数加法 

具体推算 

//------------------------------0.1------------------------------------
//0.0001100110011001100110011001100110011001100110011001 1001         -
//1.1001100110011001100110011001100110011001100110011001E-4           -
// 阶码部分   -4+1023=1019  01111111011                                -
// 0 01111111011 1001100110011001100110011001100110011001100110011001 -
// 0-01111111011-1001100110011001100110011001100110011001100110011001 -
//------------------------------0.1------------------------------------//------------------------------0.7------------------------------------
//0.1011001100110011001100110011001100110011001100110011 0            -
//1.0110011001100110011001100110011001100110011001100110E-1           -
// 阶码部分  -1+1023=1022 01111111110                                  -
// 0 01111111110 0110011001100110011001100110011001100110011001100110 -
// 0-01111111110-0110011001100110011001100110011001100110011001100110 -
//------------------------------0.7------------------------------------//------------------------------对阶后相加------------------------------------//    0.0011001100110011001100110011001100110011001100110011001E-1          -// +  1.0110011001100110011001100110011001100110011001100110000E-1          -// __________________________________________________________________________//    1.1001100110011001100110011001100110011001100110011001001   (尾数部分) -//    规格化                                                                 -//    0-01111111110-1001100110011001100110011001100110011001100110011001    -//     二进制转十进制                                                        -//    0.79999999999999993338661852249060757458209991455078125               -//    0.7999999999999999                                                    -//------------------------------对阶后相加------------------------------------

特别说明:文中的部分截图来自国防科技大学(中国大学慕课MOOC )和 卡耐基梅隆大学 计算机原理课程截图和。

特别推荐:二进制在线转换

特别吐槽:csdn 富文本编辑器真心不好用 ~

0.1+0.7= 0.7999999999999999相关推荐

  1. Djang1.8+Python2.0迁移到Django2.0+Python3.6注意事项(转)

    Djang1.8+Python2.0迁移到Django2.0+Python3.6注意事项 参考:https://blog.csdn.net/weixin_40475396/article/detail ...

  2. mysql 8.0 docker_Docker安装MySQL8.0的实现方法

    环境:MacOS_Cetalina_10.15.1.Mysql8.0.18.Docker_2.0.0.3 1.docker仓库搜索mysql docker search mysql 2.docker仓 ...

  3. RedHat 7.0及CentOS 7.0禁止Ping的三种方法

    作者:荒原之梦 原文链接:http://zhaokaifeng.com/?p=538 前言: "Ping"属于ICMP协议(即"Internet控制报文协议") ...

  4. 【Linux】在VirtualBox-6.0中安装Manjaro18.0

    1.参考博客: VMware虚拟机下Manjaro17.1.6安装详细教程 2.在VirtualBox-6.0中安装Manjaro18.0 1)基本步骤和博客中安装17.1.6相同,下面只记录不同的. ...

  5. 编译可在Nexus5上运行的CyanogenMod13.0 ROM(基于Android6.0)

    编译可在Nexus5上运行的CyanogenMod13.0 ROM (基于Android6.0) 作者:寻禹@阿里聚安全 前言 下文中无特殊说明时CM代表CyanogenMod的缩写. 下文中说的&q ...

  6. 从零开始学习tensorflow2.0之熟悉tf2.0的数据

    导入tensorflow2.0 安装tensorflow2.0,使用pip安装,在jupyter notebook之中 !pip install tensorflow !pip install ten ...

  7. 记selenium1.0升级到selenium2.0

    前阵子因为要进行支持多浏览器的自动化测试,原来selenium1.0仅支持到firefox3.6,IE8,chrome4的版本,而公司GA数据显示用户多使用IE9,Firefox20,chrome26 ...

  8. 更改mvc版本的时候,手动修改交3.0改到4.0,将razor改到2.0,仍然提示出现错误,mvc3.0...

    偶然碰到,更改mvc版本,由3.0升级到4.0,但是依然提示3.0的错误 几经周折排查,最终发现 <runtime><assemblyBinding xmlns="urn: ...

  9. oracle websp,探索Web2.0成就SP 2.0之路

    最近我看到互联网上最火爆的话题是:Web2.0如何赢利?而在SP行业论坛中最热的讨论是:是SP如何走出当前的困局,最近也有些行业人士抛出了一个SP2.0的概念.前段时间和网易前内容总监李学凌聊天,他说 ...

  10. torch==1.1.0和torchvision-0.3.0安装

    torch==1.1.0和torchvision-0.3.0安装 分开安装,每次都会把torch升级成1.5.0把版本.解决办法,一起安装. pip3 install --timeout=12000 ...

最新文章

  1. 雷林鹏分享:Lua 错误处理
  2. *【CodeForces - 574A】Bear and Elections (优先队列,水题模拟)
  3. linux_iptables 详解
  4. 今天遇见了setTimeout()函数
  5. 诺基亚7 android 9,诺基亚7 Plus正式推送安卓9.0系统!
  6. 基于51单片机的电子时钟
  7. 重大建设项目土地勘测定界涉及基本农田怎么计算
  8. php AES加解密
  9. android获取全部ram和rom,手机中的RAM和ROM,你懂得多少?
  10. schtasks设置windows开机启动bat脚本
  11. python通过调用百度天气API接口获取天气信息
  12. 大数定理与中心极限定理
  13. 有些市场上卖的卤牛肉40元一斤,是真牛肉吗?
  14. 微信根据Media_id下载录音报错readfile(): Peer certificate CN=`mp.weixin.qq.com‘ did not match expected CN=`file
  15. HTTP强缓存和协议缓存
  16. 微信小程序中的wxml如何自动缩进、对齐
  17. XBOX之Kinect1与2的区别
  18. CollapsingToolbarLayout的使用及折叠事件监听
  19. 基于SIMULINK的燃烧过程模糊PID控制系统仿真
  20. 培训班里的36岁女青年

热门文章

  1. 设计网页小框的名字 怎样插入图片
  2. 幼儿园里面有科技设备么
  3. linux启动根文件系统
  4. ruby-0.49源码分析
  5. 业绩成倍增长的中梁控股,却是越来越难的发展窘境?
  6. 【第七周】文本和数据格式化
  7. iOS 跳转到地图后导航(高德地图,百度地图,腾讯地图,苹果手机原生的地图)
  8. 观澜湖大地生态艺术园
  9. OCR 开源软件 Tesseract 的下载和入门使用
  10. 冠铭机器人_优必选宣布冠名《铁甲雄心Ⅱ》 并联合创客星球推出机器人挑战赛...