陪js玩个模仿游戏(谈谈浮点数运算)

  在互联网,没有人知道你是一条狗。

  而最近的全世界都认识了一条狗:阿尔法狗(AlphaGo)。没错,就是那只击败人类世界冠军的谷歌家的狗。还记得当年深蓝(Deep Blue)战胜象棋冠军时,媒体尽管震惊,但还是满怀自信地放言:计算机要在围棋上战胜人类,再等100年吧!(因为它有10的172次方种可能,远超于宇宙中所有粒子总数)。如今,没有一丝丝防备,最后的防线被攻陷了……

  于是人们又开始恐慌AI了,本蜀黍(博主)当然没有资格劝说大家淡定,但有一个人可以,就是AI他爸爸。

  有木有人记得这位父亲:图灵(Alan Turing)。

  

  图灵七十多年前提出的测试,到今天仍旧是行业的准则。作为全栈工程师,我很负责任地告诉你,目前的计算机是不可能通过图灵测试的。

  由一道加法开始说起:0.1+0.2 == 0.3?

  很遗憾,计算机会告诉你,这个表达式恒为false。我靠,这TMD不是逆天了么。但事实就是如此,迄今为止,计算机都是冯·诺依曼体系结构(本蜀黍突然想起了《三体》中的冯·诺依曼,士兵排列成方形,举旗为1,放下为0,形成一块巨大的芯片)。

  

  其中运算器这部分,也就是我们通常所说的CPU(相当于大脑),它永远都只能计算整数。为啥只能计算整数呢,因为它只认识0和1。那为啥只认识这两个数字呢,因为电路的底层只能实现二进制,用“开”来表示1,“关”来表示0。但它是怎么计算小数和分数的呢,答案就是我们这次的主题:浮点数。

var result = 0.1+0.2;
console('0.1+0.2='+result );//0.1+0.2=0.30000000000000004

   所以要辨别是人类还是机器,只要问他这个问题就好啦:

   

   其实呢,浮点数还有更多的诡异现象,比如:

console.log(0.3/0.1); //2.9999999999999996

  还有更有意思和更具深度的讲解,请移步到阮一峰老师的博客:数值

  抛砖引玉哈~

 

posted @ 2016-03-30 14:36  肖大叔的小巫  阅读(237)  评论(0编辑  收藏  举报