close







為什麼float~跟double




立即點擊


為什麼我用印出來都會顯示5.0000000後面那000000到坻怎嚜來ㄉ?還有ㄊㄉ範圍怎ㄇ算我怎ㄇ不會算1.2e-38~3.4e382.2e-308~1.8e308~~INT我知道原理就是2的32次方~~但是上面我就不懂了





麻煩不要用注音文! printf 對 %f 自定為 小數下六位。 所以你(常)會看到 6 個 0(不是 7個!)。 你可以用 %.0f 去關掉那些 0,或用 %g。 但,這都只能解決簡單的問題。 float 是 1 bit 的 sign,8 bits 的 指數,(1+)23 bits 的假數。 根據科學記號表示法:整數只能是一位數,且不得為0。 在二進位,它只可能是 1! 因此,二進位的科學記號,(除了0)永遠是 1.xxxx。 所以,IEEE 754 (電腦最常用的公定 float 標準)規定: 儲存時,那個 1. 的 1 就省了! 也就是說:在 IEEE754,假數只存小數部份! 這樣的假數,最小值為:0,就是 1.000000... 再來看指數部份。 指數部份最小當然也為 0!對應到的是 -127。 問題是:指數 0,假數 0,被規定為 數值 0! 所以,0不能用的情況下,最小就是 1 囉! 1 對應到 -126。 所以,最小的正 float 是 1.0 * 2^-126 = 1.1754943508222875079687365372222e-38 ≒ 1.2e-38 不對啊!我見過 1.401298464324817 e-45 耶! 那是非正規化的數值,非絕對必要,不建議使用! 那,最大值不是:指數全 1,對應到 128,假數全 1囉? 抱歉!指數全 1 規定是:數值有問題,如:根號 -1、 1./0等之類! 所以,指數只能用 127 這時是 1.111111...1 * 2^127 = 3.4028234663852886e38 ≒ 3.4e38 這樣會了嗎? double 就留給你做練習囉!這樣你才能真的會做! (指數 bits 數:11,假數 bits 數:(1+) 52) 哪不會請補問。^_^








以上文章來自奇摩知識家,如有侵犯請留言告知


https://tw.answers.yahoo.com/question/index?qid=20100915000015KK13747

9D1C50A44D654017
arrow
arrow

    「最美麗主持人」 發表在 痞客邦 留言(0) 人氣()