c語言float精度
A. 在c語言中float數據數值范圍是多少
C語言中,float 為單精度浮點數,佔4位元組,其數值范圍為3.4E-38 ~3.4E+38或者-(3.4E-38 ~3.4E+38)
float的指數位有8位,尾數位有23位,符號位1位。
於是,float的指數范圍為-127~+128,按補碼的形式來劃分。
其中負指數決定了浮點數所能表達的絕對值最小的非零數;而正指數決定了浮點數所能表達的絕對值最大的數,也即決定了浮點數的取值范圍。
所以,float的范圍為-2^128 ~ +2^128,也即-3.40E+38 ~ +3.40E+38
B. c語言 float類型保留幾位啊 怎麼確定
float類型默認保留小數點後6位,若是要輸出一位或者其他位數,可以按照以下形式進行輸出:
printf("%.(這里輸入要輸出的位數)f",x);
如輸出一位:printf("%.1f",x);
實例
#include <stdio.h>
#include <float.h>
int main()
{
printf("float 存儲最大位元組數 : %lu ", sizeof(float));
printf("float 最小值: %E ", FLT_MIN );
printf("float 最大值: %E ", FLT_MAX );
printf("精度值: %d ", FLT_DIG );
return 0;
}
C. float在C語言中是什麼意思具體的。double呢謝謝!
float在C語言中是 單精度浮點數, double 是雙精度浮點數。它們精度不同,能表示的數值范圍大小不同。
單精度浮點數,4位元組, 字長32位,有一位符號位,指數位共8位,尾數共23位。 指數能夠表示的指數范圍為-128~127。float的精度為6~7位有效數字。 float的范圍為-2^128 ~ +2^128,也即-3.40E+38 ~ +3.40E+38。
double: 8位元組, 字長64位,有一位符號位 11bits(指數位), 52bits(尾數位),指數能夠表示的指數范圍為 -1023~+1024。double的精度為15~16位。double的范圍為-2^1024 ~ +2^1024,也即-1.79E+308 ~ +1.79E+308。
===
在程序中,它們可用於聲明變數類型,例如 float a=1.23; double d=123.45; 。
若帶小括弧, 例如:x = (float) b; y=(double) c; 則表示 類型強制轉換。
若在註解行中 , 例如: /* vx is float type, z is double type */ 則為註解。
若用雙引號括起來,則是字元串,例如:
char s1[]="This is float !", s2[]="That is double !"; //字元串常量。
D. c語言float的精度問題
因為float的有效數字是7位數字,以後的就會不正常,如果你想輸出正常的數值,可以定義成double類型
E. c語言中float型的精度問題
浮點數不是連續值,有一定精度,特點是動態范圍大。它還沒有int的精度高,因為int是32位表示,float只有23位有效值,其他是符號位和指數。
既然計算得不到12.10,就是浮點數不能精確表示12.10。
c
=
12.099998精度也很高了,只差0.000002,差值很小了
F. C中的float和double的有效數字和精度各是多少
float和double是有IEEE標準的,不是C語言定的,其它語言也一樣。
double型90%的情況下有效位是16位的10進制數據是對的。來一段lua程序:
local b= 9007199254740991
print("b="..string.format("%d", b))
for i=1,10 do
print("i="..i..",b+i="..string.format("%d", b+i))--列印的全是偶數
end
for i=1,10 do
print("i="..i..",b-i="..string.format("%d", b-i))--列印正確
end
由此可見,大於9007199254740991(2進制52位最大的數),從2^53開始誤差就大於1。