[問題] 關於float跟double的問題
爬過文發現這問題還漫多人問的,但看過之後還是不太懂我的問題該如何解
ex.1
#include<iostream>
int main()
{
float num=999.999999;
printf("%f\n",num);
double num2=999.999999;
printf("%lf\n",num2);
system("pause");
}
執行結果:1000.000000
999.999999
1.為什麼float的輸出會進位成1000.000000?而double的不會
〈我想是溢位的問題,因為double再多打幾個9也會進位,不過有人跟我說是因為
printf會將太小的數自動進位〉
如果是溢位問題,那如何得知可以打到小數以下第幾位?
〈記得float可以打到第六位,double是十幾位,但我才打到這些標準的前面幾位就
不行了〉
如果是太小被自動進位,那是多小會做這動作?
2.
ex.2
#include<iostream>
int main()
{
float num=999.999;
printf("%f\n",num);
double num2=999.999;
printf("%lf\n",num2);
system("pause");
}
執行結果:999.999023
999.999000
把小數以下改成到第三位,float輸出後面多了怪怪的數字,是因為0.999用2的負n
次方去逼近所產生的問題嗎?可是為什麼double就沒這問題?
3.
其實我不是很懂printf跟cout的差別,關於用cout去執行
第一個例子結果是
執行結果:1000
1000
第二個例子結果是
執行結果:999.999
999.999
為什麼會不一樣?
==================
不好意思問題這麼多麻煩大家看完,謝謝
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.229.134.160
推
05/05 01:14, , 1F
05/05 01:14, 1F
→
05/05 01:17, , 2F
05/05 01:17, 2F
→
05/05 02:19, , 3F
05/05 02:19, 3F
推
05/05 09:29, , 4F
05/05 09:29, 4F
→
05/05 09:30, , 5F
05/05 09:30, 5F
→
05/05 09:31, , 6F
05/05 09:31, 6F
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章
18
34