11809 - Floating-Point Numbers

以下文章轉(zhuǎn)載自http://www.voidcn.com/blog/crazysillynerd/article/p-3592545.html

時間限制:3.000秒
題目鏈接:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=830&page=show_problem&problem=2909

算是個數(shù)學(xué)題吧,雖然在AOAPC上面給放到象征水題的第三章里面了臣镣。
  這個題基本就是幫著你復(fù)習(xí)了一遍浮點數(shù)的存儲方式了厂抽。浮點數(shù)在計算機里是分三部分表示的妻导,最前面一位表示符號,后面一部分是尾數(shù)抛丽,最后一部分是階碼,表示方法類似于科學(xué)記數(shù)法,不過是二進制的巍扛,尾數(shù)是M階碼是E的話那么表示起來就是M × 2^E了。然后對于M還有一個要求乏德,就是1/2 ≤ M < 1撤奸,所以用二進制表示M的話就應(yīng)該是0.1XX……,用計算機表示的時候就把最前面的“0.1”這個永遠不變的部分給省略掉喊括,只表示可能變化的部分胧瓜。階碼部分則是只用二進制表示E。

  

  上面的圖就給出了一個例子郑什,前面的0表示是正數(shù)府喳。后面8位表示尾數(shù)m,這里是0.111111111(注意后面是9個1蹦误,因為頭一個省略了)劫拢。之后那個0表示分割,最后面6位表示e的二進制為111111强胰。所以這個數(shù)就是
舱沧,用十進制表示就是


  在計算機中用二進制表示M和E的時候如果位數(shù)不同偶洋,那么它們所能表示的最大值也不同∈炖簦現(xiàn)在給你所能夠表示的最大的浮點數(shù)的值,讓你倒回去求M和E分別有多少位玄窝。輸入格式為AeB牵寺,表示最大浮點數(shù)為
,并且0 < A < 10恩脂,并且保證輸出的結(jié)果中0 ≤ M ≤ 9且1 ≤ E ≤ 30帽氓。輸入以0e0表示結(jié)束,0e0本身不計算俩块。

這個如果直接去算的話相當(dāng)麻煩黎休,當(dāng)E很大的時候數(shù)會直接超出上限浓领。這個時候可以反過來想,最大的時候M和E的每一位肯定都是1势腮,并且又有0 ≤ M ≤ 9且1 ≤ E ≤ 30的限定联贩,所以一共只有300種情況,自然就想到了打表捎拯,先用二重循環(huán)枚舉M和E可能出現(xiàn)位數(shù)的所有情況打一張表泪幌,然后輸入的時候倒回去找即可。

假設(shè)當(dāng)前一層M和E的值為m和e署照,它們的位數(shù)分別為i和j祸泪。
  首先計算m的值,用二進制表示的話藤树,m的值為0.11…浴滴,也就是m = 2^(-1) + 2^(-2) + … + 2^(-1 - i)(i比實際1的個數(shù)少1個),也就是m = 1 - 2^(-1 - i)岁钓。
  接下來就是計算e的值升略,不難得出,e = 2^j - 1屡限。
  那么也就有m * 2^e = A * 10^B品嚣,似乎可以直接計算了。然而钧大,直接這樣算的話是不行的翰撑,因為當(dāng)e太大的話(e最大可以是1073741823,注意這還只是2的指數(shù))啊央,等號左邊的數(shù)就會超出上限眶诈,所以要想繼續(xù)算下去,就得自己去想辦法再寫出滿足要求的類來瓜饥,這顯然太麻煩了逝撬。所以,這個時候我們對等式兩邊同時取對數(shù)乓土,這個時候就有 log10(m) + e × log10(2) = log10(A) + B宪潮。因為此時m和e的值都是確定的,所以不妨令等式左邊為t趣苏,也就有t = log10(A) + B狡相。

這個時候就有問題了,A和B怎么算食磕。
  寫題解的時候突然意識到了這個問題尽棕,讀題的時候很多人,包括我彬伦,都把AeB默認(rèn)為了科學(xué)記數(shù)法滔悉,在ACM協(xié)會群里面討論的時候很多人也都說這是科學(xué)計數(shù)法蟀悦。先來看如果是科學(xué)記數(shù)法的時候應(yīng)該怎么辦。
  如果是科學(xué)記數(shù)法的話氧敢,那么對于A,就有1 ≤ A < 10询张。那么0 < log10(A) < 1孙乖。所以t的小數(shù)部分就是log10(A),整數(shù)部分就是B份氧,即B = ?t?唯袄,A = 10^(t - B)。那么接下來蜗帜,我們只需要開出兩個二維數(shù)組來恋拷,分別記錄對應(yīng)i和j下A和B的大小,之后從輸入里提取出A和B的大小厅缺,去二維數(shù)組里面查找對應(yīng)的i和j即可蔬顾。
  這種辦法在UVA上面是可以直接AC的,但是我卻感覺這題這樣A了有點數(shù)據(jù)太水的感覺湘捎,秉著處女座+強迫癥死磕到底的精神诀豁,我們看下哪里有問題。
  其實回頭讀下題窥妇,我們發(fā)現(xiàn)科學(xué)記數(shù)法1 ≤ A < 10的條件是我們腦補出來的舷胜,題目里面根本沒有提及,只是簡單交待0 < A < 10活翩。也就是說烹骨,對于確定的M和E的位數(shù),十進制的表示可以有多種材泄,例如樣例中的5.699141892149156e76沮焕,下面的數(shù)據(jù)應(yīng)當(dāng)也是完全可能的,而且結(jié)果應(yīng)當(dāng)與樣例的結(jié)果是相同的(當(dāng)然是在保證精度可以計算出結(jié)果的前提下):

0.569914189214915e770.056991418921491e780.005699141892149e790.000569914189214e80
  帶著這個想法我分別拿著上面的數(shù)據(jù)去UVA toolkit和uDebug上試了試脸爱, UVA toolkit依舊能夠輸出“5 8”的結(jié)果來遇汞,但是uDebug告訴我我的輸入不合法……果真是我想多了么……
  不過這個問題也好辦,還是看上面的數(shù)據(jù)簿废,忽略掉后面幾位精度丟失的問題的話空入,上面的幾個數(shù)完全可以通過“A *= 10, B -= 1”或者“A /= 10, B += 1”的操作來相互轉(zhuǎn)化。那么對于0 < A < 1的A的值族檬,我們就可以通過“A *= 10, B -= 1”的操作來使其滿足科學(xué)記數(shù)法的條件歪赢。

另外,在查表的時候還應(yīng)該注意精度的問題单料,15位有效數(shù)字對于double來說精度似乎也不夠埋凯,而且計算出所需要的整數(shù)值其實需要的精度也沒有那么高点楼,所以這里的精度就只用到了1e-4的程度。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末白对,一起剝皮案震驚了整個濱河市掠廓,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌甩恼,老刑警劉巖蟀瞧,帶你破解...
    沈念sama閱讀 221,635評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異条摸,居然都是意外死亡悦污,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,543評論 3 399
  • 文/潘曉璐 我一進店門钉蒲,熙熙樓的掌柜王于貴愁眉苦臉地迎上來切端,“玉大人,你說我怎么就攤上這事顷啼√ぴ妫” “怎么了?”我有些...
    開封第一講書人閱讀 168,083評論 0 360
  • 文/不壞的土叔 我叫張陵线梗,是天一觀的道長椰于。 經(jīng)常有香客問我,道長仪搔,這世上最難降的妖魔是什么瘾婿? 我笑而不...
    開封第一講書人閱讀 59,640評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮烤咧,結(jié)果婚禮上偏陪,老公的妹妹穿的比我還像新娘。我一直安慰自己煮嫌,他們只是感情好笛谦,可當(dāng)我...
    茶點故事閱讀 68,640評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著昌阿,像睡著了一般饥脑。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上懦冰,一...
    開封第一講書人閱讀 52,262評論 1 308
  • 那天灶轰,我揣著相機與錄音,去河邊找鬼刷钢。 笑死笋颤,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的内地。 我是一名探鬼主播伴澄,決...
    沈念sama閱讀 40,833評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼赋除,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了非凌?” 一聲冷哼從身側(cè)響起举农,我...
    開封第一講書人閱讀 39,736評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎敞嗡,沒想到半個月后并蝗,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,280評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡秸妥,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,369評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了沃粗。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片粥惧。...
    茶點故事閱讀 40,503評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖最盅,靈堂內(nèi)的尸體忽然破棺而出突雪,到底是詐尸還是另有隱情,我是刑警寧澤涡贱,帶...
    沈念sama閱讀 36,185評論 5 350
  • 正文 年R本政府宣布咏删,位于F島的核電站,受9級特大地震影響问词,放射性物質(zhì)發(fā)生泄漏督函。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,870評論 3 333
  • 文/蒙蒙 一激挪、第九天 我趴在偏房一處隱蔽的房頂上張望辰狡。 院中可真熱鬧,春花似錦垄分、人聲如沸宛篇。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,340評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽叫倍。三九已至,卻和暖如春豺瘤,著一層夾襖步出監(jiān)牢的瞬間吆倦,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,460評論 1 272
  • 我被黑心中介騙來泰國打工炉奴, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留逼庞,地道東北人。 一個月前我還...
    沈念sama閱讀 48,909評論 3 376
  • 正文 我出身青樓瞻赶,卻偏偏與公主長得像赛糟,于是被迫代替她去往敵國和親派任。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,512評論 2 359

推薦閱讀更多精彩內(nèi)容

  • 01. 顱腦CT掃描采用的聽眶線是()璧南。 (1.0 分) A. 外耳孔與外眼眥的連線 B. 外耳孔上緣與眶下緣的連...
    我們村我最帥閱讀 3,275評論 0 6
  • 高級鉗工應(yīng)知鑒定題庫(858題) ***單選題*** 1. 000003難易程度:較難知識范圍:相關(guān)4 01答案:...
    開源時代閱讀 5,799評論 1 9
  • 1. 下列敘述錯誤的是()掌逛。 (2.0 分) A. 質(zhì)量管理包括QA和QC一切活動的全部過程 B. 影像質(zhì)量是指對...
    我們村我最帥閱讀 3,848評論 0 8
  • 陰天 連綿的風(fēng) 輕柔吹過我耳旁 像花火的苗,更像霧雨的延…… 雪天 低吟的白晶 忽閃著松動的眼眸 像天真的孩童司倚,更...
    狐貍也寒冷閱讀 178評論 2 5
  • 這個世界上豆混, 沒有誰是誰的備胎, 只有我愛你动知, 你卻不知珍惜皿伺。 紅子是我小學(xué)、初中盒粮、高中鸵鸥、大學(xué)的同桌,我們兩個人之...
    莫里l閱讀 580評論 0 1