我正在進行計算,它將double轉換爲binary,在此過程中發生了一個奇怪的問題,最終導致錯誤。因此,當我發現結果錯誤時,我會打印出小數部分。在計算double值時錯誤計數增加
一塊爲小數部分的代碼是這樣的:
while(float_part != (int)(float_part)){
float_part -= (int)(float_part); //just leave fractional part
float_part *= 2; //float_part is a double
res = res + to_string(((int)(float_part))); //add to "res", which is a string
cout << float_part << "+" << length << "\n"; //to figure out why
length--; //the length is initialized to 32
if(length <= 0){
return "ERROR"; //if too long
}
}
然後我輸入「28187281.525」(僅0.525在上面的代碼段的事項),並發現其結果是如此奇怪:
1.05+32
0.1+31
0.2+30
0.4+29
0.8+28
1.6+27
1.2+26
0.4+25
0.799999+24
1.6+23
1.2+22
0.399994+21
0.799988+20
1.59998+19
1.19995+18
0.399902+17
0.799805+16
1.59961+15
1.19922+14
0.398438+13
0.796875+12
1.59375+11
1.1875+10
0.375+9
0.75+8
1.5+7
1+6
1101011100001101010010001.100001100110011001100110011
一開始沒關係,但最終結果出錯了!
爲什麼0.4 * 2成爲0.799999 ..
任何人都知道的原因是什麼?提前致謝!
這麼多重複已經 –
好吧..謝謝你們 –