當前位置:首頁 » 編程語言 » c語言203的精確度
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言203的精確度

發布時間: 2022-10-11 21:33:12

A. c語言中單雙精度數表示什麼意思

c語言中單精度數和雙精度數的本質區別在於數據類型所佔的內存位元組,浮點數,在C語言中使用的是IEEE754浮點數編碼,該標准規定了單精度浮點數和雙精度浮點數所佔的內存位元組,一般單精度數佔用4個位元組,雙精度數佔用8個位元組,擴展雙精度數佔用80個位元組。IEEE754具體的標准如下:

格式 長度 符號位 指數位 尾數位 有效位數 指數偏移 尾數說明
單精度 32 1 8 23 24 127 有一位隱含位
雙精度 64 1 11 52 53 1023 有一位隱含位
擴展雙精度 80 1 15 64 64 16383 沒有隱含位

B. C語言中如何用實驗的方法確定double型浮點數能精確到多少位小數

可以通過定義一個double型的變數,並對變數進行賦值,之後輸出該變數的值即可。


下面舉例來具體說明:

doublef=3.141592653589;
printf("%lf",f);

實驗結果輸出3.141593,說明double型能精確到小數點後6位。


註:該測試是在32位計算機中的VS2010環境下運行的,具體的精確度還要考慮計算機的位數與編譯環境。

C. C語言數據精度

計算機內部用2進制,我們輸入10進制,
所以 輸入時 10進制 要轉換為 2進制,
輸出時,2進制 要轉換為 10進制。
浮點型數據 10進制 要轉換為 2進制,常常是 「化不凈」 的。
如同 算術里的 1.0/3.0 = 0.333333333333333333333333333....

浮點型數據 float 用 32 位 2 進制, double 用 64 位 2 進制, 由於位數的限制。 float 有效數字 精度 只有 6-7 位 10進制,double 精度 14 位。

控制讓它輸出很多位小數,遠遠超過float的精度范圍,計算機能輸出,但超出 6-7 位 的數值不可靠。例如:
float x=0.3;
printf("%30.20f",x);
計算機輸出: 0.30000001192092896000
顯然 後面的小數 1192092896000 沒實際意義。

D. C語言%f精確度的問題

float提供7位有效位,這七位包括小數點,後面不足六位小數補0。
應為float型數佔4個位元組,一個位元組佔8位,總共就是32位,能達到這么大的。

E. c語言如何精確小數點後指定位數

可以在輸出時,指定小數點後的有效位數,實現精確到若干位的效果。
要精確到小數點後若干位,則數據類型為浮點型,可能為單精度(float)或雙精度(double)。
在C語言中,使用格式化輸出函數printf來實現輸出。
輸出格式為
%.NF
1 %為格式化字元串的引導字元。
2 .N表示指定顯示N位小數。
3 F為類型字元,對於float, F值為f, 對於double,F值為lf。

舉例:
1 要輸出float a=1.23234; 保留3位小數的寫法為:
printf("%.3f",a);
2 輸出double b=123.345232; 保留4為小數,寫法為:
printf("%.4lf",b);

F. c語言中float型和double型的精確度

float的有效數字(包括整數部分)是6-7位,是指,7位數字能精確一部分,不是全部
double的有效數字(包括整數部分)是15-16位,同上。

G. C語言什麼是單精度、雙精度

C語言中用float描述單精度,用double描述雙精度。為什麼要把數據分成單雙精度呢?我們生活中通常用到數據時會說精確到小數點後幾位,計算機存儲數據時精確度越高,佔用內存空間越大,根據精確度的需要,如果你選用單精度數據,是說你讓電腦用較少的空間存放數據,表現為精確到小數點後5位,並且第五個小數還是四捨五入得到的,如果你用雙精度定義數據,是說你用較多的空間存放同一個數,表現為小數點後較多的位數,同樣最後一位仍然是四捨五入得到。這就是區分單雙精度的原因。

H. 如何用C語言實現精確軟體定時

在精度要求較高的情況下,如要求誤差不大於1ms時,可以利用GetTickCount()函數。該函數的返回值是DWORD型,表示以ms為單位的計算機啟動後經歷的時間間隔。下列的代碼可以實現50ms的精確定時,其誤差小於1ms。

// 起始值和中止值
DWORD dwStart, dwStop ;
dwStop = GetTickCount();

while(TRUE) {
// 上一次的中止值變成新的起始值
dwStart = dwStop ;
// 此處添加相應控制語句
do
{
dwStop = GetTickCount() ;
}while(dwStop - 50 < dwStart) ;
}

微軟公司在其多媒體Windows中提供了精確定時器的底層API支持。利用多媒體定時器可以很精確地讀出系統的當前時間,並且能在非常精確的時間間隔內完成一個事件、函數或過程的調用。利用多媒體定時器的基本功能,可以通過兩種方法實現精確定時。

1.使用timeGetTime()函數

該函數定時精度為ms級,返回從Windows啟動開始所經過的時間。由於使用該函數是通過查詢的方式進行定時控制的,所以,應該建立定時循環來進行定時事件的控制。

2. 使用timeSetEvent()函數

利用該函數可以實現周期性的函數調用。函數的參數說明如下:

uDelay:延遲時間;

uResolution:時間精度,在Windows中預設值為1ms;

lpFunction:回調函數,為用戶自定義函數,定時調用;

dwUser:用戶參數;

uFlags:標志參數;

TIME_ONESHOT:執行一次;

TIME_PERIODIC:周期性執行。

具體應用時,可以通過調用timeSetEvent()函數,將需要周期性執行的任務定義在lpFunction回調函數中(如:定時采樣、控制等),從而完成所需處理的事件。需要注意的是:任務處理的時間不能大於周期間隔時間。另外,在定時器使用完畢後,應及時調用timeKillEvent()將之釋放

對於精確度要求更高的定時操作,則應該使用QueryPerformanceFrequency()和QueryPerformanceCounter()函數。這兩個函數是系統提供的精確時間函數,並要求計算機從硬體上支持精確定時器。QueryPerformanceFrequency()函數和QueryPerformanceCounter()函數的原型如下:

BOOL QueryPerformanceFrequency(LARGE_INTEGER *lpFrequency);

BOOL QueryPerformanceCounter(LARGE_INTEGER *lpCount);

數據類型LARGE_INTEGER既可以是一個8位元組長的整型數,也可以是兩個4位元組長的整型數的聯合結構,其具體用法根據編譯器是否支持64位而定。

在進行定時之前,先調用QueryPerformanceFrequency()函數獲得機器內部定時器的時鍾頻率,然後在需要嚴格定時的事件發生之前和發生之後分別調用QueryPerformanceCounter()函數,利用兩次獲得的計數之差及時鍾頻率,計算出事件經歷的精確時間。

I. c語言里單精度和雙精度怎麼理解

單精度和雙精度顧名思義是兩種精度的不同劃分,單精度float是保證7位有效數字,double是保證16位有效數字。
例:(float)(10%3)
結果是1.000000即七位有效數字,(後面不一定全是0,計算機可隨機選擇數字,所以整數1不等於float或double的1)
(double)(10%3)
同理結果是:1.XXXXXXXXXX……後面有十五位的有效數字
雖然整數位都是1,但由於有效位數不同,即後面隨機派出的小數可能不同,所以二者理論上不同,實際比較不能用==,要用fabs()<1e-6.