仓酷云

标题: JAVA网站制作之代码之谜(四)- 浮点数(从惊奇到思索)仓酷云 [打印本页]

作者: 精灵巫婆    时间: 2015-1-18 11:23
标题: JAVA网站制作之代码之谜(四)- 浮点数(从惊奇到思索)仓酷云
手机用到的是用j2me所编出来的小程序。在『代码之谜』系列的前几篇文章中,良多次呈现了浮点数。浮点数在良多编程言语中被称为复杂数据范例,实在,浮点数比起那些庞大数据范例(好比字符串)来讲,一点都不复杂。
单单是申明IEEE浮点数就能够写一本书了,我将用几篇博文来复杂的说说我所了解的浮点数,算是举一反三吧。
一次口试

记很多年前我雇用Java程序员时的一次关于浮点数、二分法、编码的口试,多年今后,他已称为了一位很杰出的程序员。每次聚首他城市告知我,“那次口试完全改动了我的已往的进修体例,我之前只是自觉承受常识,基本就没有本人思索过,那次对话,比我年夜学四年学到的常识都多”。
我看他简历上写到读过《信息论》才谈了良多关于二分法和编码的话题,全部历程也许3个小时——这是我口试工夫最长的一次。
由于工夫长远,我把一些我能回想起来的关于浮点数的内容收拾在这篇博客中。
格局申明:
一切我说的话,都放在援用内里。他的话放在了引号(“”)内里。没有加引号的是我的心思举动大概申明。
浮点数个数
在8位盘算机上,浮点数一共有几个呢?
“8位的仿佛太甚时了,如今支流的是32位的,仿佛能够暗示3x1038。”
公然不出我所料,良多卒业生都把盘算机学成了理科,他们不是在进修实际常识,而是承受/背诵这些常识
8位盘算机能够暗示的整数是几个呢?
“这个复杂,2的8次方,应当是256个。N位盘算机暗示的整数就是2的N次方。”
他回覆时显得很镇静,由于他终究能够辩驳我的概念了,他没有把盘算机看成融会贯通的学科。
8位盘算机,大概说8bit能够暗示28个整数
假如用这8bit来暗示字符,能够暗示几个呢?
“呵呵,固然也是2的8次方了,不然就没有需要再创造16位大概32位的unicode往暗示汉字了。”
如你方才所说,8bit能够暗示3x1038个浮点数。那末你预算一下,2bit能够暗示几个浮点数呢?
“既然2bit能够暗示4个整数,浮点数嘛一定比这个多,起码也得能暗示10几个浮点数吧。”
好吧,依照你的思绪,我说几个数。

如今你把0.4给我暗示出来?
『他思考了半晌』“哦。我分明了,2bit能够暗示4个数,不论是整数、小数大概字符,就算是用2bit暗示苹果,我们也只能暗示4个,假如想要暗示更多,就得用更多的bit位。”
固然他在简历中写到读过《信息论》,他对**Nbit能够暗示的信息量是2N**一定没有完整了解,大概只是主动承受了这个定理。
过了一会儿他又持续说:“依照这个逻辑,8bit只能暗示256个浮点数了,这也太少了。我有点懵懂了,浮点数的暗示局限一样平常都得几万乃至几亿啊。”
浮点数精度

因而我在firebug内里写了几行代码(能够在本系列第一篇的叙言部分找到这些代码)。
  1. 0.2+0.40.1+0.1+0.1+0.1+0.1+0.1+0.1+0.1+0.1
复制代码
“这怎样大概呢?JS竟然这么不严厉?”
明显他把这类征象回结于js(谢天谢地,他没有把罪恶加在firebug身上)。因而我用Java重写了下面的代码,这回他只剩呆头呆脑了。
既然他已入手下手惊奇,那末下一步就是思索。我又稍作懂得释:
任何言语都传播鼓吹他们的浮点数的暗示局限是3x1038,这个数究竟多年夜呢?今朝所知宇宙的岁数是1.373x1010年。
可是32bit最多只能暗示232个数,约莫是4x109。
对照一下你就会发明使人震动的了局。
假如把浮点数的局限比做地球,那末能够准确暗示的浮点数还不到一粒芝麻年夜。
“这么说,0.2+0.4是由于他不克不及够准确暗示,以是呈现了盘算毛病的征象。那在编程中怎样制止这类成绩呢?”
定点数暗示小数
浮点数等价于小数吗

“定点数不是整数吗?定点数怎样暗示小数啊?”
很明显,有一个实际性观点毛病。他没有真正了解甚么是定点,甚么是浮点。
浮点数能够暗示整数吗?好比,floata=2能够吗?
“能够是能够,这个2在盘算机内里应当存储的是2.0吧?”
盘算机一定没有存储2.0。百分之一万的一定。盘算机存储的是0、1串。呵呵。
“我以为浮点数应当不会存储整数的2,他存储的应当是小数的2.0,然后转换成0、1串,是如许吗?”
他连续问了我几个成绩,使我感到到,我不是在口试,而是在上课。
整数和小数是数学内里的观点,在盘算机中,只要定点数和浮点数,没有整数和小数
定点数在教材里怎样界说的?
“忘了,只晓得定点数就是整数,浮点数就是小数。仿佛先生也是这么讲的。”
[quote]那是由于你们先生不是我,假如我当先生,一定不会这么教授教养生。『笑』
定点、浮点,“点”是甚么意义?“点”就是小数点。
把小数点流动,一般流动在最左面,就是定点数。
把小数点浮动,就是浮点数。浮点在哪儿?这个在IEEE浮点数尺度内里界说的。

在ruby里才是一切皆对象。当然我不并不是很了解ruby,但是ruby确实是将语法简化得很好。
作者: 若天明    时间: 2015-1-20 23:46
J2SE开发桌面应用软件比起 VC,VB,DEPHI这些传统开发语言来说,优势好象并不明显。J2ME对于初学者来说,好象又有点深奥,而且一般开发者很难有开发环境。
作者: 飘飘悠悠    时间: 2015-1-30 07:33
你可以去承接一些项目做了,一开始可能有些困难,可是你有技术积累,又考虑周全,接下项目来可以迅速作完,相信大家以后都会来找你的,所以Money就哗啦啦的。。。。。。
作者: 透明    时间: 2015-2-6 08:26
是一种使网页(Web Page)由静态(Static)转变为动态(Dynamic)的语言
作者: 小妖女    时间: 2015-2-7 23:30
应用在电视机、电话、闹钟、烤面包机等家用电器的控制和通信。由于这些智能化家电的市场需求没有预期的高,Sun公司放弃了该项计划。随着1990年代互联网的发展
作者: 深爱那片海    时间: 2015-2-22 22:52
《JAVA语言程序设计》或《JAVA从入门到精通》这两本书开始学,等你编程有感觉的时候也可以回看一下。《JAVA读书笔记》这本书,因为讲的代码很多,也很容易看懂,涉及到面也到位。是你学习技术巩固的好书,学完后就看看《JAVA编程思想》这本书,找找一个自己写的代码跟书上的代码有什么不一样。
作者: 兰色精灵    时间: 2015-3-7 04:01
Java是一种计算机编程语言,拥有跨平台、面向对java
作者: 只想知道    时间: 2015-3-7 09:03
你快去找一份Java的编程工作来做吧(如果是在校学生可以去做兼职啊),在实践中提高自己,那才是最快的。不过你得祈祷在公司里碰到一个高手,而且他 还愿意不厌其烦地教你,这样好象有点难哦!还有一个办法就是读开放源码的程序了。我们知道开放源码大都出自高手,他们设计合理,考虑周到,再加上有广大的程序员参与,代码的价值自然是字字珠叽,铿锵有力(对不起,偶最近《金装四大才子》看多了)。
作者: 山那边是海    时间: 2015-3-9 15:35
你快去找一份Java的编程工作来做吧(如果是在校学生可以去做兼职啊),在实践中提高自己,那才是最快的。不过你得祈祷在公司里碰到一个高手,而且他 还愿意不厌其烦地教你,这样好象有点难哦!还有一个办法就是读开放源码的程序了。我们知道开放源码大都出自高手,他们设计合理,考虑周到,再加上有广大的程序员参与,代码的价值自然是字字珠叽,铿锵有力(对不起,偶最近《金装四大才子》看多了)。
作者: 海妖    时间: 2015-3-17 00:08
自从Sun推出Java以来,就力图使之无所不包,所以Java发展到现在,按应用来分主要分为三大块:J2SE,J2ME和J2EE,这也就是Sun ONE(Open Net Environment)体系。J2SE就是Java2的标准版,主要用于桌面应用软件的编程;J2ME主要应用于嵌入是系统开发,如手机和PDA的编程;J2EE是Java2的企业版,主要用于分布式的网络程序的开发,如电子商务网站和ERP系统。
作者: 精灵巫婆    时间: 2015-3-23 08:00
是一种将安全性(Security)列为第一优先考虑的语言




欢迎光临 仓酷云 (http://ckuyun.com/) Powered by Discuz! X3.2