0.1+0.7= 0.7999999999999999
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相关推荐
- Djang1.8+Python2.0迁移到Django2.0+Python3.6注意事项(转)
Djang1.8+Python2.0迁移到Django2.0+Python3.6注意事项 参考:https://blog.csdn.net/weixin_40475396/article/detail ...
- 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仓 ...
- RedHat 7.0及CentOS 7.0禁止Ping的三种方法
作者:荒原之梦 原文链接:http://zhaokaifeng.com/?p=538 前言: "Ping"属于ICMP协议(即"Internet控制报文协议") ...
- 【Linux】在VirtualBox-6.0中安装Manjaro18.0
1.参考博客: VMware虚拟机下Manjaro17.1.6安装详细教程 2.在VirtualBox-6.0中安装Manjaro18.0 1)基本步骤和博客中安装17.1.6相同,下面只记录不同的. ...
- 编译可在Nexus5上运行的CyanogenMod13.0 ROM(基于Android6.0)
编译可在Nexus5上运行的CyanogenMod13.0 ROM (基于Android6.0) 作者:寻禹@阿里聚安全 前言 下文中无特殊说明时CM代表CyanogenMod的缩写. 下文中说的&q ...
- 从零开始学习tensorflow2.0之熟悉tf2.0的数据
导入tensorflow2.0 安装tensorflow2.0,使用pip安装,在jupyter notebook之中 !pip install tensorflow !pip install ten ...
- 记selenium1.0升级到selenium2.0
前阵子因为要进行支持多浏览器的自动化测试,原来selenium1.0仅支持到firefox3.6,IE8,chrome4的版本,而公司GA数据显示用户多使用IE9,Firefox20,chrome26 ...
- 更改mvc版本的时候,手动修改交3.0改到4.0,将razor改到2.0,仍然提示出现错误,mvc3.0...
偶然碰到,更改mvc版本,由3.0升级到4.0,但是依然提示3.0的错误 几经周折排查,最终发现 <runtime><assemblyBinding xmlns="urn: ...
- oracle websp,探索Web2.0成就SP 2.0之路
最近我看到互联网上最火爆的话题是:Web2.0如何赢利?而在SP行业论坛中最热的讨论是:是SP如何走出当前的困局,最近也有些行业人士抛出了一个SP2.0的概念.前段时间和网易前内容总监李学凌聊天,他说 ...
- torch==1.1.0和torchvision-0.3.0安装
torch==1.1.0和torchvision-0.3.0安装 分开安装,每次都会把torch升级成1.5.0把版本.解决办法,一起安装. pip3 install --timeout=12000 ...
最新文章
- 雷林鹏分享:Lua 错误处理
- *【CodeForces - 574A】Bear and Elections (优先队列,水题模拟)
- linux_iptables 详解
- 今天遇见了setTimeout()函数
- 诺基亚7 android 9,诺基亚7 Plus正式推送安卓9.0系统!
- 基于51单片机的电子时钟
- 重大建设项目土地勘测定界涉及基本农田怎么计算
- php AES加解密
- android获取全部ram和rom,手机中的RAM和ROM,你懂得多少?
- schtasks设置windows开机启动bat脚本
- python通过调用百度天气API接口获取天气信息
- 大数定理与中心极限定理
- 有些市场上卖的卤牛肉40元一斤,是真牛肉吗?
- 微信根据Media_id下载录音报错readfile(): Peer certificate CN=`mp.weixin.qq.com‘ did not match expected CN=`file
- HTTP强缓存和协议缓存
- 微信小程序中的wxml如何自动缩进、对齐
- XBOX之Kinect1与2的区别
- CollapsingToolbarLayout的使用及折叠事件监听
- 基于SIMULINK的燃烧过程模糊PID控制系统仿真
- 培训班里的36岁女青年