c語言為什麼輸入 乙個實數123 123輸出的結果會變?

時間 2021-06-09 20:09:16

1樓:林凱

簡單點說,十進位制數如何表示1/3呢,0.333333……,再乘以幾個10也抹不掉小數點!

二進位制數如何表示0.3呢?再乘以幾個2也抹不掉小數點!

3.14159269不能用八位十進位制***表示

123.123同樣不能用二十三位的float表示

打比方和原理的分割線

浮點數由1位符號位 + 若干位指數字 + 若干小數字組成

float就是1位符號位 + 8位指數字 +23位小數字

float:2^23=8388608,一共7位,能絕對能保證的為6位,也即float的精度為6~7位。

123.123轉化的時候,先將123轉化為1111011

再將0.123轉化為(假設)0001010100110011001010010100100101010010……

最後加起來123.123就是1111011.000101010011001100101001010010010101001……

注意:因為有效位數的關係,只能擷取24位有效資料,誤差就產生在這裡

(對於第一位的1不儲存,第0至第22位,放入11101100010101001100110,其他第23至31位都是表示的位移方向、位移長度、正負等)

當然因為是printf的關係,預設只有6位小數,其實還原到顯示的值並不是123.123001

c語言程式題,比如輸入乙個數3256,將他從小到大輸出,就是2356。怎麼寫。

Guoy 把數字以字元的形式讀入,記錄每一位出現的次數,再依次輸出即可。需要去重,將出現次數置1即可。include int isDigit char c void print int count,int digit int main while 1 從小到大依次輸出每一位出現的次數 for int...

怎樣用c語言做到輸入乙個人的名字才會輸出乙個心

涇渭漳淮 我來寫個最最簡單的,一點廢話都沒有。int main return 0 xfan include intmain int 問題的意思是說,題主可以畫出乙個心,只是題主想問,怎樣輸入乙個名字再輸出這個心。只需要在程式最前面定義乙個字元陣列,再加if判斷判斷這個字元陣列如果 名字,就畫乙個心。...

為什麼 C 語言源程式最後一行要是乙個空行?

pansz C 語言是在 Unix 中發明的,為 Unix 系統的程式語言,它對檔案的處理遵循乙個基本的原則 檔案是流式的,可以被任意的拼接並且拼接後仍然保證完整性。為了保證這一點,在 Unix 中 n 符號被定義為一行的 結束符 換句話說,如果一行的結尾沒有 n 視為這一行沒有結束,換句話說這個檔...