1
em84 2017-11-30 10:15:42 +08:00
o.999999...不就是等于 1
|
2
FreeEx 2017-11-30 10:21:51 +08:00
试试这个 console.log(1/3 + 1/3 +1/3);
|
3
xiubin 2017-11-30 10:23:10 +08:00
10x - x = 9
x = 0.99999... 10x = 9.99999... 10x - x = 9 x = 1 10x = 10 10x - x = 9 so: 0.999999... == 1 js 里出现什么我都是不奇怪的,因为我坚信 Swift 才是要统治世界的语言,2333333 |
4
Tink 2017-11-30 10:24:26 +08:00
有个东西叫微积分
|
5
changnet 2017-11-30 10:24:57 +08:00 via Android
浮点型精度问题,哪种语言都有啊
|
6
hsuan 2017-11-30 10:25:00 +08:00
楼主高中生吧,没学过极限的概念?
|
7
zhx1991 2017-11-30 10:25:17 +08:00
1=0.9 的循环
不懂的人应该重上一下大学的数学课 计算机没有无限循环的说法 |
9
dangoron 2017-11-30 10:29:38 +08:00 via Android
额。。同学估计没学过数值运算?数字化之后有精度损失的
10 * 0.999999 … - 0.999999 … = 9 * 0.999999 … = 9.999999 … - 0.999999 … = 9 1 = 0.999999 … 这是在循环小数能循环到无限低位才成立的,数值化之后自然不成立了。js 浮点数的值不精确导致===结果很奇怪 |
10
Navee 2017-11-30 10:34:07 +08:00
你要考虑到计算机语言浮点类型数据的精度。
|
11
zhengxiaowai 2017-11-30 10:39:42 +08:00
听过 ieee 754 么,绝大多数的语言的浮点数都是用这个标准的
|
13
mengzhuo 2017-11-30 11:00:47 +08:00 1
@xiubin #12
我之前学计算机原理的时候也不是很清楚,直到看到这位教授的课程 &index=9&list=PLbtzT1TYeoMgzLyE9n-pJrTFZX18EUKw_ 简单的说,有限的计算机对无限的小数无解,一切都只是近似 |
14
DOLLOR 2017-11-30 11:11:01 +08:00 via Android
这是很典型的浮点精度丢失问题,所有语言都会有的。
|
15
araraloren 2017-11-30 11:17:40 +08:00
|
17
Panic 2017-11-30 11:27:24 +08:00
难道不是高数问题吗
|
18
clino 2017-11-30 11:35:19 +08:00
0.9999999.... 就是 1
因为 1- 0.9999999.... 的结果 0.000000.... 这后面一直是 0 没有任何其他数的,所以就是 0 |
20
nullcoder 2017-11-30 11:46:14 +08:00
第一个问题参考高数的极限概念
13 楼的视频对第二个问题应该很有帮助 简单说,就是有限位的二进制的小数不能表示所有十进制的小数 比如十进制的 0.2,二进制就是无限小数。如果你了解十进制二进制转换。 常见的一个例子就是 0.1 + 0.2 != 0.3 |
21
victor97 2017-11-30 11:49:31 +08:00 via Android
楼主的第一个问题是数学问题。0.99999999 无限循环,就是 1
但这个问题不能用代码验证…因为计算机浮点类型会损失精度。 |
26
Tunar 2017-11-30 12:12:35 +08:00 via Android
。。突然想到这个
1/9=0.11111111111 2/9=0.22222222222 3/9=0.33333333333 。。。。。。。。。 8/9=0.88888888888 9/9=? |
28
bxb100 2017-11-30 12:37:43 +08:00 via Android
可怕
|
29
tlday 2017-11-30 12:40:41 +08:00 via Android
@xiubin 虽然我也觉得 js 设计的很烂,但你这个论据我不服。浮点数精度又不是 js 的问题。精度敏感的场合用 decimal 是常识。
|
31
cmlx1014 2017-11-30 13:16:24 +08:00
高等数学学了没?
|
32
Ehend 2017-11-30 13:17:45 +08:00 via Android
9*x/(1-x)在区间(0,1)中可以无限展开为 9*(x+x^2+x^3+x^4+...),把 x=0.1 代入可得,0.9/0.9=9*(0.1+0.01+0.001+...)=0.9999...=1
这是高数里的级数,有兴趣可以自己学习,0.999...实质上就是 1,已经被证明了的,不是所谓的趋近于 |
33
ybf1220 2017-11-30 13:47:30 +08:00 via iPhone 1
记得以前有个比喻很形象:子弹从 0 米射向 1 米外的靶,肯定是先到 0.9 米,然后 0.99 米,然后 0.999 米 0.9999 0.99999 ……如果两个不相等不等于说子弹永远打不到 1 米的地方,所以这两个是相等的
|
34
yvanst 2017-11-30 13:56:25 +08:00 via Android
忘记在哪看到的说法了 如果两个数之间插不进任何数 那这两个就是一个数
|
36
UnknownR 2017-11-30 16:02:10 +08:00
你能找到比 1 小,比 0.9 循环大的数吗
|
37
phieo 2017-11-30 16:40:11 +08:00
这不是数学问题,是 JS 精度问题
|
38
uolcano 2017-11-30 17:01:31 +08:00 via Android
本质上是二进制到十进制小数的转换问题,所有语言都有这个问题
|
39
keinx 2017-11-30 18:28:20 +08:00
比去你那个,这个才是个奇怪的问题
![]( https://i.loli.net/2017/11/30/5a1fdd295a70e.png) |
40
zjw60320 2017-11-30 18:50:00 +08:00
这是高中数学吧?极限的问题
|
42
ihuzhou 2017-11-30 19:46:18 +08:00
大学有一个教授讲座就跟我们讲 0.9 的循环==1
|
43
tobeit 2017-11-30 19:49:15 +08:00
有个叫二进制的东西
好好研究一下吧 |
44
hasbug 2017-12-01 09:05:03 +08:00
千万不要对比浮点数,它会毁了你的三观。
|
45
susucoolsama 2017-12-01 09:28:06 +08:00
我觉得是计算机无法表示极限吧,毕竟是 0 和 1 的集合。
|
46
HatMatrix 2017-12-01 13:28:19 +08:00
不奇怪
|