c语言对浮点数的处理默认是double吗,C语言中浮点数float和double输出的问题
C語言中浮點數float和double輸出的問題
關注:260??答案:6??信息版本:手機版
解決時間 2019-01-12 07:33
斑駁影
2019-01-11 09:20
#includevoid main()
{
float num;
double dnum;
num=563.23;
dnum=78954327.07;
printf("num=%f",num);
printf("\ndnum=%lf",dnum);
}
執行結果:
num=563.229980
dnum=78954327.0700000
我想請問如上題,書上寫float單精度浮點型提供7個有效數字,而double雙精度浮點型提供15到16位有效數字。那怎么輸出結果會是這樣?位數是不是多了?請知道的大俠們幫幫忙,小女子先謝過了~
最佳答案
哼嘿闖九州
2021-01-13 11:38
類型 比特數 有效數字 數值范圍
float 32 6-7 -3.4*10(-38)~3.4*10(38)
double 64 15-16 -1.7*10(-308)~1.7*10(308)
long double 128 18-19 -1.2*10(-4932)~1.2*10(4932)
簡單來說,Float為單精度,內存中占4個字節,有效數位是7位(因為有正負,所以不是8位),在我的電腦且VC++6.0平臺中默認顯示是6位有效數字;double為雙精度,占8個字節,有效數位是16位,但在我的電腦且VC++6.0平臺中默認顯示同樣是6位有效數字(見我的double_float文件)
還有,有個例子:在C和C++中,如下賦值語句
float a=0.1;
編譯器報錯:warning C4305: 'initializing' : truncation from 'const double ' to 'float '
原因:
在C/C++中(也不知道是不是就在VC++中這樣),上述語句等號右邊0.1,我們以為它是個float,但是編譯器卻把它認為是個double(因為小數默認是double),所以要報這個warning,一般改成0.1f就沒事了。
通常的做法,經常使用double,而不喜歡使用float。
參考 BBB33141159的回答
全部回答
1樓古靈精怪小妖精
2021-01-13 16:16
用%f和%lf
2樓賣櫻桃的小丸子
2021-01-13 15:40
不管float,double,輸出時小數點后默認都是6位
不過不知道 你的double怎么是7位。。。
3樓古靈精怪小妖精
2021-01-13 14:31
如果想讓結果更精確的話就選double,如果結果只要求小數,精確度不要那么高,選
float就行了,小數點后兩位的輸出結果,double 是首
選
4樓作業被我養得白白的
2021-01-13 13:06
不要多想。
只要記得
float的尾數位是23bit,對應7~8位十進制數,所以有效數字有的編譯器是7位,也有的是8位
可以參考:http://hi.baidu.com/yu_xiyan/blog/item/461482dbb32d0c6dd1164edf.html
寫的比較清楚
5樓不要捏我臉啦
2021-01-13 12:16
這里有個概念要搞清楚,精度和輸出小數點后多少位不是一回事。精度是說某種類型的浮點數在C中計算時有多少位是有效的,這實際上是包括整數部分的,但不包括小數點那一位;而輸出小數點后多少位是由輸出函數printf中的控制字符串確定的。float的精度是6到7位,就是說連整數部分有6位是可信的,再長了就是機器垃圾值了;double有16到17位是可信的,再多了也是機器垃圾值。下面的代碼可說明這一問題。
float型x的值從第8位2開始就是垃圾值了,盡管要求輸出小數點后10位;double型y的值從第18位起也是垃圾值,盡管要注輸出了小數點后20位——這里全是0是碰巧,絕大多數情況下是亂七八糟的機器值。
我要舉報
如以上問答內容為色情/暴力/低俗/不良/侵權等信息,可以點下面鏈接進行舉報,我們會做出相應處理,感謝你的支持!
大家都在看
推薦資訊
總結
以上是生活随笔為你收集整理的c语言对浮点数的处理默认是double吗,C语言中浮点数float和double输出的问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux go redis,godis
- 下一篇: C语言函数调用一般分,C语言调用声明函数