⑴ c語言浮點數誤差的解決
浮點數表示法的確存在精度丟失的問題,是由於最低有效位的限製造成的。而且一般其實際表示的數值會比規定的要小。比如2.6的浮點數表示為40266666H,而該數實際的值是2.5999999,這樣計算的結果是0.0999999比0.1小,不能輸出0.1,產生精度丟失,而如果將其表示更改為40266667H,其表示的實際值是2.6000001,而這個數可以輸出0.1的結果的。所以如果要使計算能夠得出正確結果,可以嘗試在輸入的時候將有效位數擴展,以確保得出正確結果。
比如要輸出2.6的結果,可以設sx=2.6000001,這樣可以使浮點數表示結果為大於2.6的盡可能小的值。如果要輸出2.1的結果,可以設sx=2.1000001。
int k=0;
float sx=2.6000001;
⑵ 如何提高浮點數表示的精確度。
內部類型的精度是固定的,要提高精度可以用雙精度 double 型 ,或自定義類來實現浮點數存儲
⑶ C語言編程序時怎麼控制浮點型輸出的小數點精確到幾位
使用輸出格式說明符來指定精確到小數點位數。
如:
void main()
{
float a=345.234678;
printf("%.3f ", a) ;
}
其中%.3f里的3就表示輸出精確到小數點後3位。
所以可參考的形式是printf("%m.nf",p);
%m.nf,指定輸出的數據共佔m列,其中有n位是小數。如果數值長度小於m,則左端補空格,若數值長度大於m,則按實際位數輸出。
(3)c語言如何提高浮點數運算的精度擴展閱讀:
實型變數分為兩類:單精度型和雙精度型,
其類型說明符為float 單精度說明符,double 雙精度說明符。在Turbo C中單精度型佔4個位元組(32位)內存空間,其數值范圍為3.4E-38~3.4E+38,只能提供七位有效數字。雙精度型佔8 個位元組(64位)內存空間,其數值范圍為1.7E-308~1.7E+308,可提供16位有效數字。
實型變數說明的格式和書寫規則與整型相同。
例如: float x,y; (x,y為單精度實型量)
double a,b,c; (a,b,c為雙精度實型量)
實型常數不分單、雙精度,都按雙精度double型處理。
⑷ 如何提高c語言精確度
1.規定明確的數據類型(int、double、float)
2.用
Math
里的函數捨去或補齊
3.麻煩一點、設定數據偏移量,在捨去或補齊編譯量范圍內的數據
比如
偏移量為
0.001
if
(0.800000011 -
0.800 <
0.001
*
5)
{
0.800000011 =
0.800;
}
else
{
0.800000011 =
0.800
+
0.001;
}
至於
0.800
這個數是怎麼取的
方法有很多
可以截取字元串,可以計算,可以用Math里的函數
計算的方法
:
0.800000011 -
0.800000011 %
0.001
計算過程中一定要明確數據類型,數據類型越明確誤差越小
⑸ c語言中浮點數的精度如何控制,使誤差在0.001內
用while,do...while,for循環都可以,如
do
{
eps = ...
}while(eps < 0.001)
⑹ C語言如何實現高精度浮點運算
可以試試新版的VC#, 使用LONG DOUBLE 等等, 我記得是可以用4 BYTE 的數字的.
然後使用 math lib, 就可以進行大數字運算.
⑺ 如何提高c++浮點數運算的效率
對精度是有限的,可以換成整數再運算
如 12.34 ,可以*100轉成1234,最後計算完後,再/100
~
⑻ c語言怎麼解決float精度問題
:浮點數不是連續值,有一定精度,特點是動態范圍大。它還沒有int的精度高,因為int是32位表示,float只有23位有效值,其他是符號位和指數。 既然計算得不到12.10,就是浮點數不能精確表示12.10。 c = 12.099998精度也很高了,只差0.000002,差值很小了
⑼ C語言中浮點數的精度問題
如果你輸入的時候用%f,那麼可能編譯能通過,但是會有警告,運行的時候就會出現問題,因為你要是按%f輸入一個浮點類型的數,那麼存儲變數的時候,每個變數會佔四個位元組,而當你用到變數時,是double類型的,會出去八個位元組,這八個位元組可能四個是你輸入的,剩下的那四個就是屬於垃圾數據了,所以不行,而當你用%lf輸入時,存儲是八個位元組,用的時候也是八個位元組,所以就沒問題了。