[問題] 浮點數的誤差
如題,我對於浮點數誤差的觀念好像有錯
貼上一小段code,作為發問的問題
const double rate1 = 3733.333333;
const float rate2 = 3733.333333;
double val1 = 90.003;
float val2 = 90.003;
cout<<setprecision(7);
cout<<fixed;
cout<<"double * double "<<val1* rate1<<endl
<<"double * float "<<val1* rate2<<endl
<<"float * double "<<val2* rate1<<endl
<<"float * float "<<val2* rate2<<endl;
得到結果為
double * double 336011.1999700
double * float 336011.1926755
float * double 336011.1938177
float * float 336011.1875000
再參考http://squall.cs.ntou.edu.tw/cprog/Materials/VariableTypes.html
我原本以為小數點後7位以內,四個出來的結果應該要一樣
頂多遇到進位,第7位會有不同,但上面的例子,在第2位就開始出現不同了
以下是我原本想的觀念
運算時會將type轉為double * double 運算完後再根據回傳的type再作一次轉型
例如float * float在運算的過程中就是
float*float->double*double->float*float=float
原type 計算時的type 回傳時的type
看來這觀念應該是錯的,而且我本來想說不管怎樣
double* float和float* double也應該要一樣,顯然也不是
想請高手詳細的說明一下,謝謝
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.134.238.4
→
08/29 09:45, , 1F
08/29 09:45, 1F
→
08/29 09:52, , 2F
08/29 09:52, 2F
→
08/29 09:52, , 3F
08/29 09:52, 3F
→
08/29 09:53, , 4F
08/29 09:53, 4F
推
08/29 09:59, , 5F
08/29 09:59, 5F
→
08/29 10:00, , 6F
08/29 10:00, 6F
→
08/29 10:01, , 7F
08/29 10:01, 7F
→
08/29 10:02, , 8F
08/29 10:02, 8F
推
08/29 12:02, , 9F
08/29 12:02, 9F
推
08/29 13:25, , 10F
08/29 13:25, 10F
→
08/29 13:30, , 11F
08/29 13:30, 11F
→
08/29 13:51, , 12F
08/29 13:51, 12F
→
09/06 11:28, , 13F
09/06 11:28, 13F
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章