Web 技术研究所

我一直坚信着,Web 将会成为未来应用程序的主流

无穷大到底有多大?

  人们常说“我爱你到永远”,但谁知道“永远”到底有多远呢?这么飘渺的措辞不如直接说“我爱你直到国足夺冠”来得踏实。Infinity也是个不踏实的东西,也许数学上的无穷大是很大的,但编程语言中的Infinity实际上就没象限中的那么大了,很容易就可以达到它。
  根据IEEE754中64位浮点数的定义,当指数部分达到1024时候即表示Infinity。于是 <script>
for(var i=1;i<Infinity;i*=2)
  console.log(Math.round(Math.log(i)/Math.LN2));
</script>
  这个代码不会进入死循环,它可以正常工作并输出0到1023的数字。但i到了21024时就不再小于Infinity了,于是退出循环。所以字面上的无穷大也就那么回事嘛,实际上没多大。
  另外,JavaScript中还有一个Number.MAX_VALUE,这是啥?从名字就可以看出,它表示64位的IEEE754浮点数可以表示的最大值嘛。只要稍微思考下,这个值我们也可以描述。既然是最大值,那么指数部分就是1023嘛,其它52位全部用1来填充即可。于是有 <script>
var a=Math.pow(2,53)-1, //底数部分的52位全部填充1
    b=Math.pow(2,1023-52); //指数部分1023位,减掉底数已经分配的位
alert(a*b==Number.MAX_VALUE); //弹出 true
</script>
  总之,这些看似大的离谱的数字,只要对IEEE754浮点数有所理解就完全可以秒杀它们。
网名:
52.91.185.*
电子邮箱:
仅用于接收通知
提交 悄悄的告诉你,Ctrl+Enter 可以提交哦
神奇海螺
[查看全部主题]
各类Web技术问题讨论区
发起新主题
本模块采用即时聊天邮件通知的模式
让钛合金F5成为历史吧!
次碳酸钴的技术博客,文章原创,转载请保留原文链接 ^_^