高一課程C語言>實數(浮點數)


實數(浮點數)

一、實數常數的表示方法

實數也稱為浮點型。實數常數也稱為實數或者浮點數。在C語言中,實數只採用十進位。它有二種形式:十進位小數形式,指數形式。

1)  十進位數字形式:由數碼0~ 9和小數點組成。

例如:

0.0、25.0、5.789、0.13、5.0、300.、-267.8230

等均為合法的實數。注意,必須有小數點。

2)  指數形式:由十進位數字,加階碼標誌“e”或“E”以及階碼(只能為整數,可以帶符號)組成。

其一般形式為:

a E n(a為十進位數字,n為十進位整數),其值為 a*10n

如:

以下不是合法的實數:

345 (無小數點)

E7 (階碼標誌E之前無數位)

-5 (無階碼標誌)

53.-E3 (負號位置不對)

2.7E  (無階碼)

 

標準C允許浮點數使用尾碼。尾碼為“f”或“F”即表示該數為浮點數。如356f和356.是等價的。

【例】說明了這種情況。

 

#include<stdio.h>

main(){

      printf("%f\n ",356.);

      printf("%f\n ",356);

      printf("%f\n ",356f);

}


二、實數變數

1.  實數資料在記憶體中的存放形式

實數資料一般占4個位元組(32位元)記憶體空間。按指數形式存儲。實數3.14159在記憶體中的存放形式如下:

+

.314159

1

 

  小數部分占的位元(bit)數愈多,數的有效數字愈多,精度愈高。

  指數部分占的位元數愈多,則能表示的數值範圍愈大。

2.  實數變數的分類

實數變數分為:單精確度(float型)、雙精度(double型)和長雙精度(long double型)三類。

在Turbo C中單精確度型占4個位元組(32位元)記憶體空間,其數值範圍為3.4E-38∼3.4E+38,只能提供七位有效數字。雙精度型占8 個位元組(64位元)記憶體空間,其數值範圍為1.7E-308∼1.7E+308,可提供16位有效數字。

類型說明符  比特數(位元組數)  有效數字    數的範圍

類型說明符

bit數(位元組數)

有效數字

數的範圍

float

324

6~7

10-37~1038

double

64(8)

15~16

10-307~10308

long double

128(16)

18~19

10-4931~104932

 

    實數變數定義的格式和書寫規則與整型相同。

例如:

3.  實數資料的舍入誤差

由於實數變數是由有限的存儲單元組成的,因此能提供的有效數字總是有限的。如下例。

【例】實數資料的舍入誤差。

 

#include<stdio.h>

main()

{

    float a,b;

     a=123456.789e5;

     b=a+20

    printf("%f\n",a);

    printf("%f\n",b);

}

注意:1.0/3*3的結果並不等於1。

【例】

#include<stdio.h>

main()

{

   float a;

   double b;

   a=33333.33333;

   b=33333.33333333333333;

   printf("%f\n%f\n",a,b);

 }

  從本例可以看出,由於 a 是單精確度浮點型,有效位數只有七位。而整數已占五位元,故小數二位後之後均為無效數字。

  b 是雙精度型,有效位為十六位。但Turbo C 規定小數後最多保留六位元,其餘部分四捨五入。