|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
手机用到的是用j2me所编出来的小程序。在『代码之谜』系列的前几篇文章中,良多次呈现了浮点数。浮点数在良多编程言语中被称为复杂数据范例,实在,浮点数比起那些庞大数据范例(好比字符串)来讲,一点都不复杂。
单单是申明IEEE浮点数就能够写一本书了,我将用几篇博文来复杂的说说我所了解的浮点数,算是举一反三吧。
一次口试
记很多年前我雇用Java程序员时的一次关于浮点数、二分法、编码的口试,多年今后,他已称为了一位很杰出的程序员。每次聚首他城市告知我,“那次口试完全改动了我的已往的进修体例,我之前只是自觉承受常识,基本就没有本人思索过,那次对话,比我年夜学四年学到的常识都多”。
我看他简历上写到读过《信息论》才谈了良多关于二分法和编码的话题,全部历程也许3个小时——这是我口试工夫最长的一次。
由于工夫长远,我把一些我能回想起来的关于浮点数的内容收拾在这篇博客中。
格局申明:
一切我说的话,都放在援用内里。他的话放在了引号(“”)内里。没有加引号的是我的心思举动大概申明。
浮点数个数
“8位的仿佛太甚时了,如今支流的是32位的,仿佛能够暗示3x1038。”
公然不出我所料,良多卒业生都把盘算机学成了理科,他们不是在进修实际常识,而是承受/背诵这些常识。“这个复杂,2的8次方,应当是256个。N位盘算机暗示的整数就是2的N次方。”
他回覆时显得很镇静,由于他终究能够辩驳我的概念了,他没有把盘算机看成融会贯通的学科。8位盘算机,大概说8bit能够暗示28个整数。
假如用这8bit来暗示字符,能够暗示几个呢? “呵呵,固然也是2的8次方了,不然就没有需要再创造16位大概32位的unicode往暗示汉字了。”如你方才所说,8bit能够暗示3x1038个浮点数。那末你预算一下,2bit能够暗示几个浮点数呢? “既然2bit能够暗示4个整数,浮点数嘛一定比这个多,起码也得能暗示10几个浮点数吧。”好吧,依照你的思绪,我说几个数。
- 0总该有吧,用00暗示。
- 0.1用01暗示
- 0.2用10暗示
- 0.3用11暗示
如今你把0.4给我暗示出来? 『他思考了半晌』“哦。我分明了,2bit能够暗示4个数,不论是整数、小数大概字符,就算是用2bit暗示苹果,我们也只能暗示4个,假如想要暗示更多,就得用更多的bit位。”
固然他在简历中写到读过《信息论》,他对**Nbit能够暗示的信息量是2N**一定没有完整了解,大概只是主动承受了这个定理。
过了一会儿他又持续说:“依照这个逻辑,8bit只能暗示256个浮点数了,这也太少了。我有点懵懂了,浮点数的暗示局限一样平常都得几万乃至几亿啊。”
浮点数精度
因而我在firebug内里写了几行代码(能够在本系列第一篇的叙言部分找到这些代码)。- 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确实是将语法简化得很好。 |
|