由于存储会损失精度,0.1的存储直接输出还是0.1而不是0.099999呢

由于存储会损失精度,0.1的存储应该是0111111011.100110011001100110011001
为什么float a = 0.1;
直接输出还是0.1而不是0.099999呢?

0

1个回答

虽然0.1用浮点数表示是一个近似值,但是0.099999也是一个近似值,那么如果这个浮点数更接近前者,那么输出结果就是前者。

0
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
十进制的0.1 为什么不能用二进制很好的表示?
     二进制是计算技术中广泛采用的一种数制。二进制数据是用0和1两个数码来表示的数。它的基数为2,进位规则是“逢二进一”,借位规则是“借一当二”,由18世纪德国数理哲学大师莱布尼兹发现。当前的计算机系统使用的基本上是二进制系统,数据在计算机中主要是以补码的形式存储的。计算机中的二进制则是一个非常微小的开关,用“开”来表示1,“关”来表示0。 补码计算法定义:非负数的补码是其原码本身;负数的补...
java中3*0.1 == 0.3 将会返回什么?true 还是 false?
3*0.1 == 0.3 将会返回什么?true 还是 false? false,因为有些浮点数不能完全精确的表示出来 public static void main(String[] args) { System.out.println(3 * 0.1); System.out.println(4 * 0.1); System.out.printl...
关于计算机存储浮点数、一次有趣的问题探索(0.1+0.2=0.3?)
干货请直接翻到第三个大标题开始看,其他都是随笔杂谈的部分 晚上八点,同事在群里扔出一段有趣的代码 #include <iostream> using namespace std; int main(){ double num = 55.3; int i = num; double ta = (num - i) * 100; int tb = ta; cout <&l...
避免数据相加小数点后产生多位数和计算精度损失的几个见效甚少的方法
    JavaScript里精度损失是个非常头疼的毛病,典型的[0.1+0.2==0.30000000000000004]相信大家都有耳闻   这里抛出几个简单的方法,避免一部分0.30000000000000004的头疼情况   /** * 加法运算,避免数据相加小数点后产生多位数和计算精度损失。 * @param num1加数1 | num2加数2 */ functi...
编程语言计算0.1+0.2精度误差的问题
在平时如果有人问你0.1+0.2=?的问题,你可能会鄙视他,但在计算机中这却是一个比较头疼的问题,先看一个例子: 结果是多少? 答案是:   没错,为什么不是期望的0.3呢?   先不说为什么,先看看在别的编程语言中的同样的情况: 在java中: 在python中: 为什么呢?   我们知道,计算机中存储的都是二进制的0和1,而我们现实中
用Java输出语句1-0.9等于0.1
第一种方法: System.out.printf("%.1f",1.0-0.9); 第二种方法:  System.out.println(new BigDecimal("1").subtract(new BigDecimal("0.9"))); 报错 你调用 divide 时 四舍五入即可,无线循环小数,计算机要如何处理? 所以,divide 方法有多个参数,调用多个参数方...
float浮点数0.0和1.0在计算机内存中是怎么存的?
浮点数在计算机内存中存储方式,具体的可参见博客:http://www.cnblogs.com/jillzhang/archive/2007/06/24/793901.html。 下面给出0.0和1.0在计算机内存中的存储形式的代码实现:
如何避开JavaScript浮点数计算精度问题(如0.1+0.2!==0.3)
不知道大家在使用JS的过程中有没有发现某些浮点数运算的时候,得到的结果存在精度问题:比如0.1 + 0.2 = 0.30000000000000004以及7 * 0.8 = 5.6000000000000005等等。 究竟是什么原因造成了这个问题?实际上是因为计算机内部的信息都是由二进制方式表示的,即0和1组成的各种编码,但由于某些浮点数没办法用二进制准确的表示出来,也就带来了一系列精度
javascript(js)小数精度丢失的解决方案,0.2+0.1≠0.3
  原因:js按照2进制来处理小数的加减乘除,在arg1的基础上 将arg2的精度进行扩展或逆扩展匹配,所以会出现如下情况. javascript(js)的小数点加减乘除问题,是一个js的bug如0.3*1 = 0.2999999999,0.2+0.1=0.30000000000000004等,下面列出可以完美求出相应精度的四种js算法 function accDiv(arg1, arg...
为什么0.1+0.2不等于0.3
https://segmentfault.com/a/1190000012175422 但程序员在使用浮点数进行计算或逻辑处理时,不注意,就可能出问题。记住,永远不要直接比较两个浮点的大小:
Java中(2.0-1.1)输出不是0.9的问题
问题:System.out.println(2.0d-1.1d);输出结果为:0.8999999999999999 跟据下面在这个例子来说明原因(其他情况类似): (1)System.out.println(0.01f+0.04d);输出结果为:0.04999999977648258 (2)System.out.println(0.01f+0.04f);输出结果为:0.049999997 ...
double类型精度损失问题
在十进制中小数有些是无法完整用二进制表示的。它们只能用有限位来表示,从而在存储时可能就会有误差。十进制的小数采用乘2取整法进行计算,去掉整数部分后,剩下的小数继续乘以2,直到小数部分全为0. 有的小数可能取不到零就会一直循环 0.9*2=1.8…...取整1 0.8*2=1.6…...取整1 0.6*2=1.2…...取整1 0.2*2=0.4.…..取整0 0.4*2=0.8…....
从Python的 3 * 0.1 == 0.3 输出False说浮点数的二进制
今天在学习Python核心编程的时候,十进制浮点数那段看到一个有趣的事情。 >>>0.1 0.1000000000000001 为什么会这样?
如何解决JavaScript中0.1+0.2不等于0.3
console.log(0.1+0.2===0.3);    //true or false?在正常的数学逻辑思维中,0.1+0.2=0.3这个逻辑是正确的,但是在JavaScript中0.1+0.2!==0.3,这是为什么呢?这个问题也会偶尔被用来当做面试题来考查面试者对JavaScript的数值的理解程度在JavaScript中的二进制的浮点数0.1和0.2并不是十分精确,在他们相加的结果并非...
JAVA问题总结之6--强制转换损失精度分析
JAVA强制转换损失精度分析:强制转换时是去掉高位保存低位 package p1; public class test4 { public static void main(String[] args) { long l1=12345l; byte b1=(byte)l1; System.out.println("long is "+l1);
十个原因可能导致 训练集明明很高,验证集,测试集 validation accuracy stuck 准确率 很低 损失不减小
损失函数一直在下降,为什么识别率上不去。 1.最常见的原因:过拟合 过拟合值得单独开个章节。主要包括 1.数据量小,网络复杂 2.learning rate 比较高,又没有设置任何防止过拟合的机制 解决方法主要包括 1.简化模型,利用现有深度学习手段增加数据(翻转,平移,随机裁剪,imgaug) 2.利用 dropout层 3.利用正则化 2.你犯了错误:没有把数据规格化 图片...
从0.1加0.2不等于0.3说起,浮点型的精度问题
哎,比预想的发布时间慢了一周多,曾慷慨激昂立下的flag,险些成为泡影。 话不多说,进入正题,不知道有没有看到标题直接骂街的读者:“作者傻x吧,0.1+0.2怎么可能不等于0.3,小学没毕业吧”。别急,今天讨论的不是数学上的问题,而是计算机上的,我们先看下面几张图: python: image.png js: image.png ...
解决0.3*3=0.89999....等精度丢失问题
最简单的方法: var a = 3; var b = 0.3; var c; c = a*b; alert(c)可能会出现等于0.89999 我们可以这么写:c = a*b*10/10 这样就不会出现精度丢失的问题 最简单的方法  ...
kafka中文文档0.10.pdf
kafka中文文档0.1阅读笔记 ,其中介绍了kafka的底层存储
localstorage存数据不覆盖原数据
function appendLocal(key, obj) {            if (obj == null) return;            var temp, tempStr = '';            try {                if (localStorage.getItem(key) == null) thro...
C/C++ 精度损失下的浮点数比较
等于运算符(==)const double eps = 1e-8; #define Equ(a,b) (fabs((a)-(b))<(eps))大于运算符(>)const double eps = 1e-8; #define More(a,b) (((a)-(b))>(eps))小于运算符(<)const double eps = 1e-8; #define Less(a,...
js小数计算的问题,为什么0.1+0.2 != 0.3
简介 因为 JS 采用 IEEE 754 双精度版本(64位),并且只要采用 IEEE 754 的语言都有该问题。 还有学过计算机组成原理这门课的同学应该知道,我们计算机的数据都是由0、1组成的,js的数字最终在计算机也是又0、1组成。我们先说一下小数怎么转换成二进制。 // 0.125 十进制 -> 二进制 0.125 * 2 = 0.25 取0 0.25 * 2 = 0.5 取...
0.1 + 0.2 !== 0.3 就是要说清楚因为个啥?
javascript(简称js)中的数字使用的是国际标准 IEEE 754,因为js是弱类型语言,为了方便省事,所有数字都是以64位浮点数形式储存。也就是说,js语言底层根本没有整数,所有数字都是小数(64位浮点数)! 当我们开心的进行着整数计算的时候,其实js都在算小数(莫名悲伤)。 整数算起来时没有问题的,但当你直接计算小数的时候,就麻烦了:0.1+0.2 不等于0.3 1 + 2 ==...
float double的精度损失
转:http://blog.csdn.net/fanfanjin/article/details/6908333 说的比较全面,但里面float四舍五入使用BigDecimal的方式有误,应为以下:   float d = 18896.45f; BigDecimal b = new BigDecimal(Float.toString(d));System.out.println(b.s...
关于BigDecimal比较的精度损失问题
今天项目中出现一个问题,使用BigDecimal类已经有一段时间了,现在还不是很了解其中原理,简单把这个问题记录下吧;场景 使用BigDecimal的compareTo方法时两个相等的数据判断出错; 原因 当时比较的数据中有一个是Double类型转化为BigDecimal的没有进行精度处理,另一个有进行精度处理; 处理方法 两个BigDecimal类进行比较的时候需要使用相同的精度,否则
十进制有限小数如何以二进制保存而不会变成无限小数
做高精度算法的人可能会遇到一个问题,就是如何表达0.1这个数字。如果把十进制的0.1转换成二进制,就会变成无限的小数。常规的做法是采用十进制高精度算法。但是十进制高精度算法的效率低,浪费内存。而且学过汇编和C语言的人一般会对这种方法感到很难以接受。那么我今天介绍的方法将成为你们更好的选择。其实要解决这个问题,只要明白一个道理,计算机永远不可能保存绝对精确的数字。总有一部分小数要被截断。那么我们找到...
PHP浮点数精度损失问题
      首先抛出一个问题,如下类似: <?php $a = 0.57; echo intval(floatval($a) * 100); //56     结果可能有点出乎你的意外,PHP遵循IEEE 754双精度:     浮点数, 以64位的双精度, 采用1位符号位(E), 11指数位(Q), 52位尾数(M)表示(一共64位)     符号位:最高位表示数据的...
java中处理精度要求高的数据避免用double,用BigDecimal
package com.test; import java.io.Console; import java.math.BigDecimal; import java.math.BigInteger; import java.util.Arrays; import java.util.Scanner; public class M1001 { public static void mai...
浮点数精度丢失问题的解决
大家都知道,0.1加0.1结果为0.2,但是下面程序的运行结果和预想的结果有一些差距,System.out.println("0.05+0.01 = "+(0.05+0.01)); System.out.println("1.0-0.42 = "+(1.0-0.42)); System.out.println("2.0*3.10 = "+(2.0*3.10)); System.out.println
java double 做运算精度损失问题
看代码: double a = 0.01; double b = 0.0109; double c=a+b; System.out.println(c); 大家看到这里说结果肯定是:0.0209; 计算机运算结果:0.020900000000000002由此可见这里存在精度问题,在支付等方面这就是非常重要
关于时间保存到数据库中丢失精度的问题
实体bean时间对象为java.until.Date  保存到数据库时使用的是 ps.setDate(1,new java.sql.Date(article.getSpidertime().getTime())); 然后保存到数据库就会变成 2016-04-28 00:00:00.0 原来有的时分秒丢失了。 解决方式:
[转]浮点数在计算机中存储方式与浮点(float,double)不精确问题
作者: jillzhang 联系方式:jillzhang@126.com C语言和C#语言中,对于浮点类型的数据采用单精度类型(float)和双精度类型(double)来存储,float数据占用 32bit,double数据占用64bit,我们在声明一个变量float f= 2.25f的时候,是如何分配内存的呢?如果胡乱分配,那世界岂不是乱套了么,其实不论是float还...
cs231n的第一次作业Softmax
Softmax分类器损失函数softmax的损失函数为 这里log的底数为e,即等价于 这里将最后得到的score归一化了。这位大神说的好 SVM只选自己喜欢的男神,Softmax把所有备胎全部拉出来评分,最后还归一化一下。 损失函数求导对于softmax损失函数的求导具体可以参考ufldl的Softmax回归,很详细。 自己理了下,首先 f(Xi)j = Wj * Xi,即 f
小程序自定义评分组件template(精度0.1)
小程序评分组件 说明 在豆瓣评分中,最终影视评分最大值是10分,而在影评时最大值是5星。 相比第一版比较: 评分组件最大值可调 代码有一定浓缩 如何实现 五角星也就两种状态,实星和空星。底部放置空星代表最大评分,顶部放置实星代表实际评分,只需计算出实星与空星的比例,使实星遮盖空星即可得到最终效果。前面的整星不用计算百分比,只需计算最后一个实...
由0.1+0.2-0.3不等于0说起
  刚开始做OFFICE的时候,有人测试发现0.1+0.2-0.3不等于0。这是为何?   大家知道,电脑是2进制的,表示小数时就只能采取近似的办法,于是就产生了这种现象。当时大家认为,这是因为JAVA的精度高。   某年放假时,吾突然灵光一闪,跟当时的吴某讲,这个说法不对。为什么呢?浮点数在内存表示,是有一个规范的(吾估计CPU也只认这个规范)。JAVA不可能自己搞一套,肯定也是这个规范。吴...
设置输出的精度
num=10.345; cout<<fixed<<setprecision(1)<<num; 保留一位小数; cout<<fixed<<setprecision(3)<<num; 保留3位小数; 注意:头文件#include<iomanip>...
由numpy.arange函数看双精度浮点数的精度问题
1.发现问题 想得到一个长度为57的、从0开始的、间隔为0.01的数组,想当然地如下coding,结果意料之外: >>> import numpy as np >>> t1 = np.arange(0, 0.01*57, 0.01) >>> t1.shape (58L,) 但是如果用同样的方法,可以得到正确的长度为58的、从0开始的、...
[阿里笔试]两市区C1和C2,其人口比率是1:3,从今年的患病统计来说,C1市区由于污染严重,患癌的概率是0.1%,而C2市的患癌概率是0.02%,现在医院接收到一位患癌病人,他是C1市区来的概率是?
题目(阿里笔试题):两个市区C1和C2,其人口比率是1:3,从今年的患病统计来说,C1市区由于污染严重,患癌的概率是0.1%,而C2市的患癌概率是0.02%,现在医院接收到一位患癌病人,他是C1市区来的概率是__。 解析:记患癌的为事件AA,则P(A,C1)=0.1%P(A,C_1)=0.1\%,P(A|C2)=0.02%P(A|C_2)=0.02\%。由两市的人口比例可知P(C1)=14P(C_
解决java中丢失精度问题
解决java中丢失精度问题       在电商项目中遇到的问题,正常的float、double数据进行运算会出现精度丢失问题,在涉及货币计算时会出现严重后果。 代码: System.out.println(0.03+0.0101); System.out.println(1.0-0.52); Sy...
Double类型数据精度丢失问题
  public BigDecimal(double val) 注: 此构造方法的结果有一定的不可预知性。有人可能认为在 Java 中写入 new BigDecimal(0.1) 所创建的 BigDecimal 正好等于 0.1(非标度值 1,其标度为 1),但是它实际上等于 0.10000000000000000555111512312578270211815834045410156...