2015-10-18 67 views
-2

,同時使用代碼::塊IDE和C++,表達等 result[i] += ((res*1.0 /10)-(res/10)) * 10;解決問題,如果有合適的表達式的結果是8分配給result[i]後它成爲如圖7所示,所以result[i]持有7代替8爲什麼gcc在分配表達式時從表達式中減去1?

這裏是整個功能: 它需要兩個數字並將它們中的每一個轉換爲一個數組。例如。 34變成{4,3},所以我將數字添加爲數組,而不是正常數字。

void add(char a, char b) { //get # digits of both int n1=0; int n2=0; char temp1=a; char temp2=b; //counting # digits of first number while((temp1*1.0/10) != 0) { n1++; temp1/=10; } //counting # digits of second number while((temp2*1.0/10) != 0) { n2++; temp2/=10; } int maxi=max(n1,n2); int mini=min(n1,n2); //filling arr1 arr2 char * arr1=new char[n1]; char * arr2=new char[n2]; char * result=new char[maxi+1]; //fill result with zeros for(int k=0; k<maxi+1; k++) result[k]=0; temp1=a; for(int i=0; i<n1; i++) { arr1[i]=((temp1*1.0 /10)-(temp1/10)) * 10; temp1/=10; } temp2=b; for(int j=0; j<n2; j++) { arr2[j]=((temp2*1.0 /10)-(temp2/10)) * 10; temp2/=10; } //add both arrays char res=0; char overflow=0; for(int i=0; i<maxi; i++) { if(i<mini) { res=arr1[i]+arr2[i]; if(checkDigit(res)) { result[i]=res; } else { //////////////////////////// //>>>>>>>> result[i] += ((res*1.0 /10)-(res/10)) * 10; /////////////////////////// overflow=res/10; result[i+1]=overflow; } } else { if(n1<n2) { result[i]+=arr2[i]; } else if(n2<n1) { result[i]+=arr1[i]; } } } if(!checkDigit(result[maxi-1])) { // assign overflow before result[maxi]=result[maxi-1]/10; result[maxi-1]=((result[maxi-1]*1.0 /10)-(result[maxi-1]/10)) * 10; } for(int i=0; i<maxi+1; i++) cout<<(int)result[i]<<endl; }

+0

爲什麼不在計算之前打印出'result [i]'中已有的內容? – Galik

+0

https://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html – deviantfan

+0

@Galik'結果[i]'包含零 –

回答

2

你正在做的浮點運算。計算機上的浮點操作不是特別準確。無論如何,不​​是base10。可能發生的情況是你的結果類似於7.9999999999991。標準庫中的各種文本流將打印爲8,但事實並非如此。然後,當您分配給result[i](這是一個字符 - 一個整數類型)時,您將獲得標準的「切斷後的所有內容」。來自編譯器的響應。

對此的簡單迴應是一個循環操作。將.5添加到結果中,然後轉換爲積分。雖然取決於您要解決的問題,但有多種解決方案可以解決此問題。

1

您使用浮點運算,這將引入舍入誤差,也然後將它們轉換爲整數,截斷(你在程序中,可能需要什麼)。

經驗法則:不要期望浮點數學的確切結果。細節將填補一個學期或更多的課程。

對於你的程序,你應該知道,其餘的操作,我認爲這不正是你HWAT打算做:

arr1[i]=temp1 %= 10; 
temp1/=10; 
+0

沒錯,浮點數學就是問題所在。謝謝 :) –

相關問題