導航:首頁 > 源碼編譯 > 編譯器浮點數計算錯誤

編譯器浮點數計算錯誤

發布時間:2022-04-18 06:01:31

① 請教高手: compaq visual fortran 6.6 的編譯器中使用雙精度浮點數出現問題


EK
=
-1.1
改為:
EK
=
-1.1D0
或者
EK
=
-1.1_8
既可!
請注意,-1.1
是個常數,常數也有類型。如果單純的
-1.1,他還是單精度的常數。

-1.1D0

-1.1_8
才是雙精度的常數

② c語言浮點型運算錯誤

給定的輸入數據式樣中間有逗號分隔嗎:scanf("%d,%d",&p,&q);
如果是空格分隔就要改為:scanf("%d%d",&p,&q);這樣才行

③ c語言 分數的四則運算為什麼顯示浮點數運算錯誤

優先順序:括弧優先順序最高,結合方式從左往右
% * / 是同一優先順序,但要高於+ - ,結合方式從左往右
所以說取余與四則運算是同級別是不對的
現在分析你的算式:先不論你的x,y取值 輸出結果為0
首先執行() x+y的值被強制轉換為整型
其次從左往右執行 a=10 a%3=1 (int)(x+y)%2要麼為0 要麼為1
如果為0 那麼0/4=0
如果為1 1/4等於幾呢 1 4都為整數那結果肯定是0
如果說 float m;m = 1 / 4; 那它的結果還是0 不信你可以用編譯器調試
那怎麼得到0.25呢 把上一句改為 m=1/4.0 結果就為0.25了
希望對你有幫助

④ C語言浮點運算感覺很奇怪同樣的數,算出來結果卻不一樣,這是怎麼回事

計算機存儲和運算都是以二進制處理的,而表達式是十進制的,那麼存儲或運算時是要轉換成二進制,計算完成後輸出還要再轉換成十進制。


那麼你應該明白二進制每一位權重都是2^N,此處N為位號,位號分布如下:

...3,2,1,0(小數點) -1,-2,-3...

權重分布如下:

...2^3,2^2,2^1,2^0 (.小數點)2^-1,2^-2,2^-3

例如一個二進制的1.111(B)=1.875(D)

整數部分:1的位號為0,因此1*2^0=1*1=1

小數點向右第一個1:位號為-1,因此1*2^-1=1*1/2=0.5

小數點向右第二個1:位號為-2,因此1*2^-2=1*1/4=0.25

小數點向右第三個1:位號為-3,因此1*2^-3=1*1/4=0.125

合起來1+0.5+0.25+0.125=1.875,其他位依此類推。

無需想得太多,你可以明顯看到,二進制小數表達的數都是不同級別減半後的累加。與十進制的某些小數沒有一一對應,顯然轉換必然會發生誤差。


另一方面,存儲時CPU會對十進制小數會進行編碼,float的尾數長度為23位,階碼8位,符號佔1位,共32位。double是64位,無論如何精度都是有限的,因此也會存在誤差,1.1*100時編譯器會將表達式先轉換二進制並運算運算,運算後再編碼存儲到變數中或臨時變數中,而運算是由CPU直接處理的,因此你可以看到有個0.000002的誤差數,而printf是個函數,對誤差進行了修正。

PS:簡單了解下浮點數的編碼方式網頁鏈接

⑤ c語言浮點運算。錯誤原因

很奇怪,,,,,首先float型的用%d輸出,,這個肯定是錯的,,但為什麼是的i的值也變了呢??
我做了下面的測試,,
int j=6;printf("x=%f,i=%d\n",x,i,j);
j的輸出也有問題,,但
int j=6;printf("j=%d,x=%f,i=%d\n",j,x,i);j 的輸出就沒問題,,
於是結論就很明顯了,,這是printf()的問題,,x是float型的,,用%d輸出還有剩餘,而餘下的部分被分到了i上,,導致i的輸出錯誤,,,

⑥ 用printf輸出浮點型數據時出現錯誤

明白兩點,問題就迎刃而解:

  1. int型和char型是兼容的,即int型可以用%c輸出,輸出是字元;反過來char型可以用%d輸出,輸出是十進制整數。

  2. 浮點數沒有被定義為無符號型,所以用unsigned修飾float型後實質是將變數聲明成了int型。

根據以上兩點,解釋如下:

圖1在正確輸出i(A)並回車後,把j的4個位元組拿出一個最低位元組按字元輸出,由於65的浮點尾數低位元組是0,是%c的不可顯示位元組,所以只輸出了個回車。接著按char型取出j的第二個位元組(還是0)輸出,結果同上。

圖2的j和k交換位置後,前兩個兼容都輸出字元A,到最後一個j時才遇到上面剛才分析過的情況。

圖3由於j成了無符號整數,所以輸出都正確。

供參考。建議不弄這種題,由於輸出格式化控制字元串與變數類型不匹配,本身就是錯誤的,不同的編譯器很可能做出不同的處理,所以結果也可能會不同……

⑦ C語言浮點數誤差

這叫條件表達式。條件表達式中3個表達式類型允許不一樣,計算時要向精度最高的那類型轉換(語法規則),。(emum 是整型,低於float), 所以這里是 float 型.

⑧ c語言計算為什麼結果不對

在double轉換成int時,應當考慮到數值並不準確的問題,可以考慮自己要求的精度極限,比如是0.00000001,可以寫成:printf("%d ",(int)(a/pow(10,b-1)+0.000000005); 這樣可以配合取整實現在那位上的四捨五入。

⑨ c語言、 pow()函數、浮點數、程序一直報錯,求大神指教。

<p>看不出代碼有什麼明顯錯誤。從圖片上的字元顏色看,你可能沒有成功建立工程,所以編譯器無法正確識別代碼行。比如longdouble應該是藍色的,而你這里全是黑色……我把你的代碼重敲了一遍,運行沒有你說的錯誤,證實了我的判斷。計算是否正確沒有驗證。

⑩ c語言浮點數中的計算問題

浮點數的實現依賴於具體的環境,不同的環境可以有不同的實現特徵。

devc的

我沒有怎麼學習浮點數的實現,只能經驗地說這些了
;還有為方便調試,「%d」可以換成「%f」,那樣編譯器才知道你想要輸出浮點數

閱讀全文

與編譯器浮點數計算錯誤相關的資料

熱點內容
程序員做些什麼 瀏覽:1002
加密未來的趨勢 瀏覽:323
分數等式運演算法六年級 瀏覽:427
單片機怎麼設置入口和出口參數 瀏覽:868
java字元串gbk 瀏覽:955
編程中的樹的遍歷分為哪三種類型 瀏覽:136
核心編程為什麼要變數 瀏覽:704
學動漫編程就業行情好嗎 瀏覽:164
python連接多個類 瀏覽:596
退app會員費找哪裡投訴 瀏覽:566
射擊pdf 瀏覽:84
python多張圖片拼接與層疊 瀏覽:979
河北廊坊電信dns伺服器地址 瀏覽:851
老股民指標源碼 瀏覽:31
偉福顯示未安裝編譯器什麼意思呢 瀏覽:234
拉伸命令cad 瀏覽:491
yy安卓怎麼搶麥 瀏覽:932
阿里雲共享型伺服器價格 瀏覽:443
壓縮機效率低 瀏覽:54
python讀取excel製作直方圖 瀏覽:485