首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么 JavaScript 0.1+0.2 不等于 0.3 ?

本文首发于 vivo互联网技术 微信公众号 链接:https://mp.weixin.qq.com/s/2kea7-jACCJmSYBQAwXyIg 作者:刘洋 在 js 中进行数学的运算时,会出现0.1...以0.1、0.2、0.3、0.4和0.7的二进制形式为例: 0.1->0.0001100110011...(0011无限循环)->0-01111111011-(1 .)1001100110011001100110011001100110011001100110011010...在这里我们可以发现,0.3+0.4对阶阶运算且规格化后的运算结果与0.7在二进制的存储尾数相同(可对照尾数后几位),而0.1+0.2的运算结果与0.3的存储尾数不同,且0.1+0.2转化为十进制时结果为...此时,虽然0.1+0.2与0.3+0.4进行舍入操作的近似位都为1,但一入一舍导致计算结果与“标准答案”的异同。...当粘滞位为0时,若近似位为1,无论舍入精度损失都相同,故需取舍入两种结果的偶数:保留位为1时入,保留位为0时舍(即第二部分对阶运算规格化时的舍入操作)。

1.7K10
您找到你想要的搜索结果了吗?
是的
没有找到

企业面试题: 关于JS在使用过程 0.1+0.2!=0.3 的问题

企业面试题: 关于JS在使用过程 0.1+0.2!...解题思路: 在JavaScript的二进制的浮点数0.1和0.2并不是十分精确,在他们相加的结果并非正好等于0.3,而是一个比较接近的数字 0.30000000000000004; 在IE8下是得到正常的...,在chrom 和Firefox下是一个带到浮点的约数; 其实这是js作浮点运算的一个bug,在JavsScript,变量在存储时并不区分number和float类型,而是统一按float存储。...浮点格式存储number,按照IEEE 754的定义: decimal64对应的整形部分长度为10,小数部分长度为16,所以默认的计算结果为“7.0000000000000001”,如最后一个小数为0,则取1作为有效数字标志...所以:你们会发现0.1+0.2 是不等于0.3的; ? 那么这个问题如何解决呢?

1.2K10

js的正则表达式(1)

功能函数的编写,函数的调用,传参 * 2.js的内置对象,切割:split(),切割完后得用一个变量给存储起来 * 3.for循环的遍历,遍历查找 * 4.找到对应的字符串,第0个转化为大写...; // spilt切割,border,top,color console.log(arr); // [border,top,color] for(var i = 1;...i<arr.length;i++){ // 循环遍历数组 arr[i] = arr[i].charAt(0).toUpperCase()+arr[i].substring(1);...{ // 第一个参数re表示正则,第二个回调函数,对该字符串处理方式,圆括号内的形参数表示正则表达式的子选项 return $1.toUpperCase(); // 转大写 }...两者对比: 相同点:都是为达到同一个目的,将一个字符串转换为驼峰命名 不同点:普通正常方法,得利用循环以及js内置对象提供的字符串(split,substring,join等)方法对所要操作的字符串进行操作

4.5K40

⭐️ 关键字深度剖析 ⭐️第五章(深入C语言三种类型(floatbool指针)与“零值“的比较)

; printf("%.50f\n", x - 0.9); printf("%.50f\n", y); if ((x - 0.9) == y) { printf("you can see me!...; printf("%.50f\n", x - 0.9); printf("%.50f\n", y); if (fabs((x - 0.9) - y) < DBL_EPSILON) { //原始数据是浮点数...个人看法:XXX_EPSILON是最小误差,是:XXX_EPSILON+n不等于n的最小的正数 XXX_EPSILON+n不等于n的最小的正数: 有很多数字+n都可以不等于n,但是XXX_EPSILON...//真 理论上,表示真假,需要一个bit就够了 不过这个问题,还是要取决于编译器的理解 vs2013认为是1个字节 but int main() { //在vs,光标选中BOOL,单击右键...= 1){ //TODO } if (pass != true){ //不推荐,尽管在C99也可行 //TODO } if (!

60330

1.vue源码entryruntime-with-compiler.js和runtime.js的区别

解析成抽象语法树(ast) 将ast编译成(complier)成render函数 将render函数渲染(render)成虚拟DOM 最后将虚拟DOM渲染成真实DOM runtime-with-compiler 1....渲染过程 渲染成最终真实DOM的过程 template ==> ast ==> render ==> vdom ==> UI runtime-only 1....原因在于 runtime-with-compiler的打包入口文件是src/platforms/web/entry-runtime-with-compiler.js runtime-only的打包入口文件是...src/platforms/web/entry-runtime.js runtime-with-compiler实际上引用的就是runtime-only,他们两个唯一的区别就是src/platforms.../web/entry-runtime-with-compiler.js,如下我已将不重要的一些代码删除掉了,来看一下: import config from 'core/config' import {

1K30

Java 代码界 3% 的王者?看我是如何解错这 5 道题的

1.0f - 0.9f 的结果为 0.1f,0.9f - 0.8f 的结果为 0.1f,那自然 a == b 啊。 但实际的结果竟然不是这样的,太伤自尊了。...虽然一些数字可以精确地表示为二进制小数,比如说 0.5,它等于 2-1;但有些数字则不能精确的表示,比如说 0.1。因此,浮点运算可能会导致舍入误差,产生的结果接近但并不等于我们希望的结果。...to 0.1 (an unscaled value of 1, with a scale of 1), but it is actually equal to 0.1000000000000000055511151231257827021181583404541015625...1.The String constructor, on the other hand, is perfectly predictable: writing new BigDecimal("0.1")...06、最后 阿里妹出的这五道题还是蛮有深度的,我相信有不少朋友在实际的项目应用已经遇到过了。据说这五道题背后的解决思路,将在《Java开发手册》华山版首次披露!

33830

Java 代码界 3% 的王者?看我是如何解错这 5 道题的

1.0f - 0.9f 的结果为 0.1f,0.9f - 0.8f 的结果为 0.1f,那自然 a == b 啊。 但实际的结果竟然不是这样的,太伤自尊了。...虽然一些数字可以精确地表示为二进制小数,比如说 0.5,它等于 2-1;但有些数字则不能精确的表示,比如说 0.1。因此,浮点运算可能会导致舍入误差,产生的结果接近但并不等于我们希望的结果。..." java.lang.NullPointerException at com.cmower.java_demo.Test.main(Test.java:7) 也就是说,switch () 的括号不允许传入...to 0.1 (an unscaled value of 1, with a scale of 1), but it is actually equal to 0.10000000000000000555111512312578270211815834045410...1)lock 是非公平锁 ReentrantLock 是一个使用频率非常高的锁,支持重入性,能够对共享资源重复加锁,即当前线程获取该锁后再次获取时不会被阻塞。

32620

征集代码界前 3% 的超级王者,解5 道题,结果我被秒杀了

1.0f - 0.9f 的结果为 0.1f,0.9f - 0.8f 的结果为 0.1f,那自然a == b 啊。 但实际的结果竟然不是这样的,太伤自尊了。...虽然一些数字可以精确地表示为二进制小数,比如说 0.5,它等于 2-1 ;但有些数字则不能精确的表示,比如说 0.1。因此,浮点运算可能会导致舍入误差,产生的结果接近但并不等于我们希望的结果。...main" java.lang.NullPointerException at com.cmower.java_demo.Test.main(Test.java:7) 也就是说,switch () 的括号不允许传入...to 0.1 (an unscaled value of 1, with a scale of 1), but it is actually equal to 0.1000000000000000055511151231257827021181583404541015625...1)lock 是非公平锁 ReentrantLock 是一个使用频率非常高的锁,支持重入性,能够对共享资源重复加锁,即当前线程获取该锁后再次获取时不会被阻塞。

49700

深层神经网络参数调优(三) ——mini-batch梯度下降与指数加权平均

现在假设一个值0<=β<=1,则要计算1/(1-β)天的温度的平均值,可以使用下面公式: 假设t=0时v0=0;t不等于0时,vt=βvt-1+(1-β)θt,这里的vt即在t天内温度的均值。...4、理解公式 现假设t=100,即计算100天内的均值,且设β=0.9,则公式如下: v100=0.9v99+0.1θ100 =0.1θ100+0.9v99 =0.1θ100+0.9...(0.1 v98+0.9θ99) =…=0.1θ100 +0.1*0.9θ99+0.1*0.92θ98+…0.1*0.999θ1 根据上式,可以认为是两个函数的相乘:一个是每一天的温度θt,另一个是一个衰减曲线...下面解释这个计算结果是1/(1-β)天的温度的平均值的原因: 这个是一个近似的计算。当β=0.9,根据上面的公式,相当于计算10天的均值。...因此,相当于第一个数值,会比其真实的值,小非常多(如β设置成0.9,则用上面公式计算出来的v1,相当于实际v10.1倍)。当计算的平均的数多了,由于慢慢的数值加回去了,故会逐渐消除了这个影响。

1.9K40

一道送命题:0.1+0.2 等于 0.3 吗?

本专栏总结一下回答 0.1+0.2 不等于 0.3 的思路,在回答之前要先弄清楚 0.1+0.2 的计算过程。...0.1+0.2 的计算过程计算过程 1、十进制转成二进制 在JS内部所有的计算都是以二进制方式计算的。 所以运算 0.1+ 0.2 时要先把 0.1和 0.2 从十进制转成二进制。...这里要注意 0.1 和 0.2 转成的二进制是无穷的。另外在现代浏览器是用浮点数形式的二进制来存储二进制,所以还要把上面所转化的二进制转成浮点数形式的二进制。...第二次在 0.1 和 0.2 转成二进制浮点数后,二进制浮点数相加的过程,小数位相加导致小数位多出了一位,又要让第53位的数进行为1则进1为0则舍去的操作,又造成一次精度丢失。...最终导致 0.1+0.2 不等于0.3 。 拓展 若你回答出来,面试官还可能继续问你:“ 0.1+0.2 不等于 0.3 会引起那些BUG?”

1.3K20
领券