有0没0有0女0人0玩0文0字000000000000000

推荐这篇日记的豆列
&&&&&&&&&&&&请问00请问00请问【胜芳吧】_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:136,049贴子:
请问00请问00请问收藏
快试试吧,可以对自己使用挽尊卡咯~◆◆
请问胜芳的城管依据国家那条法律法规不让失去土地的农民开电瓶车挣口饭吃,别忘了胜芳是农村,天津北京都有的是胜芳这种电瓶车和汽油三轮车,何况农村(胜芳),是自己定的法律还是国家的法律还是野蛮执法?
「天猫」全场特惠,胜芳松花蛋,正品低价,品类齐全,退换无忧,品质购物上天猫,让您足不出户,畅想一站式购物的乐趣!
快试试吧,可以对自己使用挽尊卡咯~◆◆
要是真正想要管好胜芳的交通秩序,应该把所有不正规的车辆全都管好,别的车随便违法不管,只管电瓶车,分明是歧视。
登录百度帐号为什么0.1 + 0.2不等于0.3?
0.1 + 0.2不等于0.3这是一个普遍的问题,例如在JS控制台输入将得到0.00004
在python的控制台也是输出这个数:
在C里面运行以下代码,指定输出小数位为57位:
printf("%.57f",0.1 + 0.2);
那我们的问题来了,为什么计算机计算的0.1加0.2会不等于0.3?
首先我们来看一下JS能够表示最大数是多少,如下所示,打印Number.MAX_SAFE_INTEGER和Number.MAX_VALUE:
JS能表示的最大整数为9e16,能表示的最大正数为1.79e308,这两个数是怎么得来的呢?先来看一下整数在计算机的存储方式。
我们知道计算机是使用二进制存储数据的,整数也是同样的道理,整数可以分成短整型、基本型、长整型,占用的存储空间分别为16位、32位、64位,如果操作系统是32位的,那么使用长整型将会慢于短整型,因为一个数它需要分两次取,而在64位的操作系统,一次就可以取到8个字节或64位的数据,所以使用长整型不会有性能问题。另外,32位的操作系统内存只能识别到2 ^ 32 = 4G,而现在的电脑内存动不动就是8G、16G,所以现在的电脑基本都是64位的,不比前几年。
32位有符号整型的存储方式如下图所示:
第一位0表示正数,1表示负数,剩下的31位表示数值,所以32位有符号整数最大值为:
2 ^ 31 – 1 =
即21亿多,如果要表示全球人口,那么32位整型是不够的。同理,64位有符号整型能表示的最大值为:
2 ^ 63 – 1 = 4775807
这是一个19位数,mysql数据库的id字段就经常用长整型表示,那为什么JS能表示的最大整数只有16位,而不是19位呢?这个要先说一下浮点型在计算机的存储方式。
现在浮点型的存储实现基本按IEEE754标准,符点数分为单精度和双精度,单精度为32位,双精度为64位。
在十进制里面,一个小数如0.75可以表示成7.5 * 10 ^ -1,同样地在二进制里面,0.75可以表示成:
0.75 = 1.1 * 2 ^ -1
即0.75 = (1 + 1 * 2 ^ -1) * 2 ^ -1,其中幂次方-1用阶码表示,而1.1由于二进制整数部分都是1,所以去掉1留下0.1作为尾数部分(因为都是1点多的形式,所以这个1就没必要存了)。因此0.75在单精度浮点数是这样表示的:
注意阶码要加上一个基数,这个基数为2 ^ (n – 1) – 1,n为阶码的位数,32位的阶码为8位,所以这个基数为127,8位阶码能表示的最小整数为0,最大整数为255,所以能表示的指数范围为:(0 – 127) ~ (255 – 127)即-127~128,上面要表示指数为-1,需要加上基数127,就变成126,如上图所示。
而尾数为0.1,所以尾数的最高位为1,后面的值填充0.
反过来,如果知道一个二进制的存储方式,同样地可以转换成10进制,如上图的计算结果应为:
(1 + 1 * 2 ^ – 1) * 2 ^ (126 – 127) = 1.5 * 2 ^ -1 = 0.75
那么0.1又该如何表示成一个二进制呢?
由于0.75 = 1 * 2 ^ -1 + 1 * 2 ^ -2,刚好可以被二进制精确表示,那0.1呢?没办法了,0.1无法被表示成这种形式,只能是用另外一个数尽可能地接近0.1(同理1/3无法在10进制精确表示,但是可以在3进制精确表示,只是我们习惯了10进制)。
我们可以用一小段C代码来研究一下0.1被存储成什么了,如下代码所示: void printBits(size_tconst size,voidconst*const ptr){unsignedchar*b =(unsignedchar*)int i,for(i=size-1;i&=0;i--){for(j=7;j&=0;j--){byte=(b[i]&& j)&1; printf("%u",byte);}} puts("");}double a =0.1;double b =0.1;printBits(sizeof(a),&a);printBits(sizeof(b),&b);
因为C可以读取到原始的内存内容,所以可以打印每位的数据是什么。如上代码打印的结果如下:
双精度浮点数用11位表示阶码,52位表示尾数,如下图所示:
所以双精度的阶码基数为2 ^ 10 – 1 = 的阶码为,等于二进制1019,所以它的指数为-4:
尾数约为0.6:
由于这个精度不够,我们要找一个高精度的计算器,如笔者找的这个:
有了这个尾数之后,再让它乘以指数,得到结果为:
也就是说0.1的实际存储要比0.1大,大概大了5.5e-17.
注意到,0.2和0.1的区别在于0.2比0.1的阶码大了1,其它的完全一样。所以,0.2也是偏大了:
两个数相加的结果为:
但是注意到0.1 + 0.2并不是上面的结果,要比上面的大:
这又是为什么呢?因为浮点数相加,需要先比较阶码是否一致,如果一致则尾数直接相加,如果不一致,需要先对阶,小阶往大阶看齐,即把小阶的指数调成和大阶的一样大,然后把它的尾数向右移相应的位数。如上面的0.1是小阶,需要对它进行处理,如下: 需要把0.1的小数点向右移一位变成:
向右移一位导致尾数需要进行截断,由于最后一位刚好是0,所以这里直接舍弃,如果是1,那么尾数加1,类似于十进制的四舍五入,避免误差累积。现在0.1和0.2的阶码一样了,尾数可以进行相加减了,如下把它们俩的尾数相加:
可以看到,发生了进位,变成了53位,已经超过了尾数52位的范围,所以需要把阶码进一位,即指数加1,两数和的尾数右移一位,即除以2,由于尾数的最后一位是1,进行“四舍五入”,即舍弃最后一位后再加上1,最后尾数变成了如下图所示:
而指数加1,变成了-2,所以最后的计算结果为:
这个就和控制台的输出一致了,并且和C的输出完全一致。到此,我们就回答了为什么0.1加0.2不等于0.3了。上面还提出了两个问题,其中一个是:为什么JS的最大正数是1.79e308呢?这个数其实就是双精度浮点数所能表示最大正值,如下使用python的输出:
那为什么JS的最大正整数不是正常的64位的长整型所能表示的19位呢?因为JS的正整数是用的尾数的长度表示的,由于尾数是52位,加上整数的一位,它所能表示的最大的整数为:
为什么JS要用这种方式呢?因为JS的整型和浮点型在计算过程中可以随时自动切换,应该是考虑到了这个原因,所以才拿浮点型的大小限制来做整型大小的限制。
由于后端的数据库的ID字段可能会大于这个值,如果传来了一个很大的数,在调JSON.parse的时候将会丢失精度,ID就不对了,所以如果出现这种情况,应该让后端把ID当成字符串的方式传给你。
另外需要注意的是,双精度符点数的可靠位数为15位,也就是说从第16位开始可能是不对的,如0.1 + 0.2 = 0.00004,最后面的04这两位是不可靠的。
但是会有一种情况精度要求很高,15位精度会不够用,例如计算天体运算。那怎么办呢?有一种绝对精准的方式就是用分数表示,例如0.1 + 0.2 = 3/10,计算的过程和最后的结果都用分数表示,分数的结果,你需要精确到多少位都可以取到。这个在matlab/maple等科学计算软件都有实现。
最后怎么判断两个小数是否相等呢?用等号肯定是不行的了,判断两个小数是否相等要用它们的差值和一个很小的小数进行比较,如果小于这个小数,则认为两者相等,ES6新增了一个Math.EPSILON属性,如比较0.1 + 0.2是否等0.3应该这么操作:
作者:会编程的银猪
原文:http://www.renfed.com//float-number/
责任编辑:
声明:该文观点仅代表作者本人,搜狐号系信息发布平台,搜狐仅提供信息存储空间服务。
关键在于寻找工具
这个你知道吗
今日搜狐热点又来问0.999……=1了(非证明)(外行出没) | 死理性派小组 | 果壳网 科技有意思
895411人加入此小组
今天在一论坛又看见有人问0.999……=1的问题了,深感此题影响至大,于是想要用我在果壳多年练就的思维能力解救一下他们迷茫的心灵。就在我将右手也放到键盘上的时候(喂),我犹豫了。毕竟还是不专业没底气啊,不敢误导祖国的花朵,所以还是先到这里说一下我的理解。如有错误请犀利吐槽。有人在强大的证据面前仍然对0.999……=1表示疑惑,这完全是表达方式造成的。每个可定义数都有自己的”本体”,即定义。又有其外形,即表达方式。整数和有限小数的表达方式是十进制,如循环小数的表达方式是在十进制基础上标识循环位,如问题出来了,这两个其实是完全不同的体系。无论是循环位上的点,还是“(3循环)”,还是省略号,都是为了代替“写不下但是你懂的”无限多的数字,在有限小数的世界里都是无意义的。这种双重表达法的好处是,任何一个有理数都能用非分数表达出来。但是表达形式就不是“有且仅有”一种了,一个奇葩就是“一”,根据这两个体系,就有两种表达方式,0.999……和1。也就是说,这两种表达方式会产生重合。这就好比将“可食用植物器官”分为蔬菜和水果两种,却产生了西红柿这种既属于蔬菜,又属于水果的奇葩。(此比喻有效性根据各地不同饮食习惯而异)这让我想起来,人们证明0.999……=1,和求π的第N位,动机是一样的,都是想要最大地统一不同的计数方法。π是无理数,而且是一个超越数,既不能用十进制表达,也不能用循环位表达,甚至不能用根号表达。于是人们用了一个简单粗暴的方式:直接用希腊字母表示。但这就与之前的计数方法完全脱节了,所以人们不断地计算第N位的π,其实有一点朝圣的意味吧。
我是这样理解的...若0.999...&1则必存在x,满足0.999...&x&1而∵没有这样的x满足条件∴假设不成立∴0.999...=1也可以理解为∵不存在x,满足0.999...&x&1∴集合(0.999...,1)是空集∴0.999...、1 两点重合∴0.999...=1其实用极限法证明才是最正确的啦...百度文库上有详细证明方法...
引用 的话:我是这样理解的...若0.999...&1则必存在x,满足0.999...&x&1而∵没有这样的x满足条件∴假设不成立∴0.999...=1也可以理解为∵不存在x,满足0.999...&x&1∴集合(0.999...,1)是空集∴0.999...、1 两点重合∴0.999...=1其实用极限法证明才是最正确的啦...百度文库上有详细证明方法...第一点还是不明白,
为啥一定要存在C介于A和B之间,
才能证明A小于B呢,
因为0.99999……=0.1111111……*9=九分之一*9=1证明完毕
引用 的话:第一点还是不明白, 为啥一定要存在C介于A和B之间, 才能证明A小于B呢, Orz...因为实数有稠密性。两个不相等的实数之间必定存在第三个实数,如果不存在,则这两个实数相等……唔,我也是外行。
首先,0.9999……必然最后一位是9。则必然有一个数是0.000000……2。假设最后一位为2,位数与0.999……的最后一位相同,即无限若0.999……等于1,则有0.999……+0.000……2等于1.0000……2于是我们得出一个结论:有理数不可分。然后根据上述结论,我们可得出一个推论:0.00……1为0。0.000……2也为0。继续推论,将此数无限放大,也始终为0。然后我们换一个角度:假设有一个数为0.9。此数将进行无限次运算,每次增加9乘以10的-N次方,则我们可以得到一个数为0.9999……现在有一个问题:如果0.0000……9等于0,则不可能从0.9加到1。也就是说数字是不连续的。所以这里有一个悖论,如果承认了0.999……等于1,则数字既连续,又不连续。为了解决悖论我们只能承认0.999……不等于1。只有这样,数字才可以无限细分。所以0.999……只能说它的极限是1,但是不能等同于1。
引用 的话:第一点还是不明白, 为啥一定要存在C介于A和B之间, 才能证明A小于B呢, Orz...因为实数是不可数集,不可能排排序,找出紧紧相邻的两个数,中间不含有另外一个数。或者说:b&a,b-a=c,则b&a+2/c&a,则数t=a+c/2就满足要求b&t&a
引用 的话:因为实数是不可数集,不可能排排序,找出紧紧相邻的两个数,中间不含有另外一个数。或者说:b&a,b-a=c,则b&a+2/c&a,则数t=a+c/2就满足要求b&t&a稠密性同不可数没有必然联系
引用 的话:首先,0.9999……必然最后一位是9。则必然有一个数是0.000000……2。假设最后一位为2,位数与0.999……的最后一位相同,即无限若0.999……等于1,则有0.999……+0.000……2等于1.0000……2于是我们得出一个结论:有理数不可分。然后根据上述结论,我们可得出一个推论:0.00……1为0。0.000……2也为0。继续推论,将此数无限放大,也始终为0。然后我们换一个角度:假设有一个数为0.9。此数将进行无限次运算,每次增加9乘以10的-N次方,则我们可以得到一个数为0.9999……现在有一个问题:如果0.0000……9等于0,则不可能从0.9加到1。也就是说数字是不连续的。所以这里有一个悖论,如果承认了0.999……等于1,则数字既连续,又不连续。为了解决悖论我们只能承认0.999……不等于1。只有这样,数字才可以无限细分。所以0.999……只能说它的极限是1,但是不能等同于1。你要先搞清楚 0.999…… 是什么意思
引用 的话:因为实数是不可数集,不可能排排序,找出紧紧相邻的两个数,中间不含有另外一个数。或者说:b&a,b-a=c,则b&a+2/c&a,则数t=a+c/2就满足要求b&t&a引用 的话:因为实数有稠密性。两个不相等的实数之间必定存在第三个实数,如果不存在,则这两个实数相等……唔,我也是外行。如果我有一个弟弟, 一定要存在一号人物比这个孩子大, 又同时比我小,才能证明我弟弟比我小? Orz...
引用 的话:稠密性同不可数没有必然联系是这样吗?好吧,数学盲路过。。。。T_T
引用 的话:如果我有一个弟弟, 一定要存在一号人物比这个孩子大, 又同时比我小,才能证明我弟弟比我小? Orz...你可以告诉我恰好小于1的数字是多少吗?
引用 的话:首先,0.9999……必然最后一位是9。则必然有一个数是0.000000……2。假设最后一位为2,位数与0.999……的最后一位相同,即无限若0.999……等于1,则有0.999……+0.000……2等于1.0000……2于是我们得出一个结论:有理数不可分。然后根据上述结论,我们可得出一个推论:0.00……1为0。0.000……2也为0。继续推论,将此数无限放大,也始终为0。然后我们换一个角度:假设有一个数为0.9。此数将进行无限次运算,每次增加9乘以10的-N次方,则我们可以得到一个数为0.9999……现在有一个问题:如果0.0000……9等于0,则不可能从0.9加到1。也就是说数字是不连续的。所以这里有一个悖论,如果承认了0.999……等于1,则数字既连续,又不连续。为了解决悖论我们只能承认0.999……不等于1。只有这样,数字才可以无限细分。所以0.999……只能说它的极限是1,但是不能等同于1。0.99999.....有无穷多个9,而所谓无穷多个9,就意味着没有最后一个9,所以你的话从一开始就不对了。如果你可以指出最后一个9,那它就不是无穷多个9
引用 的话:如果我有一个弟弟, 一定要存在一号人物比这个孩子大, 又同时比我小,才能证明我弟弟比我小? Orz...不是才能证明
若存在即可证明
是有这一个思路 并不是只有这一种思路
引用 的话:不是才能证明 若存在即可证明 是有这一个思路 并不是只有这一种思路我是有语境的Orz ,请看一楼的第一个证明:若0.999...&1则必存在x,满足0.999...&x&1而∵没有这样的x满足条件∴假设不成立∴0.999...=1也就是若我弟弟比我小则比存在X, 满足我弟弟&X&我而∵没有这样的x满足条件∴假设不成立∴我弟弟和我一样大我对这个表示不理解Orz
0.999……无限趋近于1,而非等于1
引用 的话:我是有语境的Orz ,请看一楼的第一个证明:若0.999...&1则必存在x,满足0.999...&x&1而∵没有这样的x满足条件∴假设不成立∴0.999...=1也就是若我弟弟比我小则比存在X, 满足我弟弟&X&我而∵没有这样的x满足条件∴假设不成立∴我弟弟和我一样大我对这个表示不理解Orz如果非要用你和你弟弟来举例的话,那只有这样说,你家里有足够多的兄弟,每个兄弟对应一个实数。然后你和你弟弟之间在这样的情况下,没有另外一个兄弟,那你就和你弟弟一样大。
引用 的话:如果非要用你和你弟弟来举例的话,那只有这样说,你家里有足够多的兄弟,每个兄弟对应一个实数。然后你和你弟弟之间在这样的情况下,没有另外一个兄弟,那你就和你弟弟一样大。对, 这是结论. 我想知道的是为什么可以这样.
其实是这样想, 如果0.9循环小于1, 那么1减去0.9循环的差值必须存在, 而在理想化状态中1-0.9循环等于0., 循环的是0, 这个1永远到不了. 所以不存在这么个数, 所以1=0.9循环
这又产生一个问题,同为理想化模型, 同为循环,只让9存在, 不让1存在...Orz
NGA论坛著名版主
引用 的话:这又产生一个问题,同为理想化模型, 同为循环,只让9存在, 不让1存在...Orz我以前写过讨论过。从极限的角度考虑比较容易。当时我提的理论如下:0.9的循环=0.9+0.09+0.009……=sum(9/10)*(1/10)^n——好吧我希望表达式没写错,这个真心多年没用,你们理解就OK……当时我提的是如果有n,必然有一个n+1,使这个fx(n)&fx(n+1)&1,所以我当时觉得0.999是一个无限趋近于1但比1小的数字。但我犯的错是……如果n是一个确认的数字时候……这个式字就不是0.9的循环了,他是一个非常非常长的小数了……在概念的范围里,n和n+1是等价的……所以其实不存在这样一个点。因此0.9……和1是重合的。大概的意思。表达可能不是很好……随便感受一下吧(留几手脸)
在系统地学极限之前,别想这些问题,真的
引用 的话:在系统地学极限之前,别想这些问题,真的
老是看见这种贴啊,问题在于这TMD一点意义都没有,你说你研究2个未知数2个方程为什么解不出来还能顺便发明下线性代数,你研究这个能发吗什么?微积分?微积分可不是这么发明的,其实就是在微积分发明后才出现的这种SB问题
引用 的话:先,0.9999……必然最后一位是9。则必然有一个数是0.000000……2。假设最后一位为2,位数与0.999……的最后一位相同,即无限若0.999……等于1,则有0.999……+0.000…...哪里来的最后一位?来自
二者不相等。应该根据计算的结果证明。2000年我已经证明了二者不相等。但是严格的计算证明需要有微积分的知识。详细请看我的文章《李长白数学网》日发布。百度可查《李长白数学网》。
来一个好理解的 1/3=0.3333333... 同时乘3 得 3/3=0.999999... 3/3=1 所以1=0.999999
认证体系的问题。数论和微积分。一个偏静态,一个偏动态。我们可以假设,玉皇大帝看到了人类的烦恼,专门派了个苦逼从现在开始写一个数X=0.……。一直写9无休止的写下去。那么,直到这个苦逼累死之前,X=1.(玩票勿喷~)
为毛初中时候同学是跟我这么证的:一除以3等于0.333333.......那么3乘0.........等于1而通常而言,我们会认为3乘0.........等于0.........所以0........等于1这么证对吗?高二党升高三党的同学表示看这么高深的微积分看不懂啊!!!!
想到一个思路可以向没有极限概念的人解释一下这个等式设想有这样的一种货币 小数点后任意位都有对应的货币单位现在我有一块钱 我到银行把一块钱换成十个一毛钱 再把其中一个一毛换成十个一分钱 再把一个一分钱换成十个一厘钱 再把一个一厘钱换成十个一毫钱 无限下去现在 考虑一下 我有多少钱? 一开始我有一块钱 后面都是等量置换 无限过程中的任意时刻 我还是有一块钱换一种描述方法 把我的钱用拥有的货币单位表示出来 9个一毛钱、9个一分钱、 9个一厘钱、 9个一毫钱 等等等等描述方法的改变不会改编描述对象的值 从而1=0.9999……
(C)果壳网&&&&京ICP证100430号&&&&京网文[-239号&&&&新出发京零字东150005号&&&&
违法和不良信息举报邮箱:&&&&举报电话:&&&&&&&&【0.1 + 0.2 = 0.00004】该怎样理解 – 开发者头条
【0.1 + 0.2 = 0.00004】该怎样理解
《【0.1 + 0.2 = 0.00004】该怎样理解?》在很多语言中 0.1 + 0.2 都会得到 0.00004。根本原因是数字以 IEEE 754 双精度 64 位浮点数 来存储的。本文就来探寻一下精度丢失的问题。
(by 韩子迟,欢迎加入伯乐在线作者团队: )
【0.1 + 0.2 = 0.00004】该怎样理解}

我要回帖

更多关于 文什么字什么 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信