說說C 的數學類,Math,浮點數 上

2021-07-04 15:13:43 字數 2517 閱讀 4095

說說c#

的數學類

,math,

浮點數

c#語言支援下圖所示的數值型別

,分別是整數

,浮點數和小數

可能不是很清楚,

但是仔細看看還是能看清楚的.

在乙個c#

程式中,整數(

沒有小數點的數

)被認為是乙個

int型別

(除非其值大於最大的

int值

),根據資料值

,該資料依次被視為

uint,ling,ulong,

帶小數點的數被認為是乙個

double值.

這就是說

(1.0).gettype()==typeof(double).

其中型別前面的字母』u』代表無符號的意思.

因為無符號,所以

u代表了資料是整數或

0,不可能是負數.

檢查整數溢位

考慮下面**:

short s=32767;s+=1;

ushort us=0;us-=1;

在第乙個情況下,

乙個有符號的數加

1,經過其最大值

,由於整數在記憶體中儲存方式的原因

,結果是

-32768.

第二種情況,

乙個無符號的數被減為小於

0,結果將是

65535.

這兩個例子分別是上溢位和下溢位的情況,

如果想避免這種情況的發生

,可以使用

checked

關鍵字:

short s=32767;

checked

s+=1;//將會產生乙個上溢位

或者使用下面的編譯器開關:

/checked+

預設編譯器開關對應為:

/checked-

迄今為止,

都在收執行時的整數向上或向下溢位檢查

,在預設情況下編譯器會將編譯時的向上和向下溢位標記為乙個錯誤

,而和你的編譯器開關無關.

例如語句:short s=32767+1;

這會產生乙個編譯時錯誤

,因為在編譯期間對加法進行求值.

例如下面這個案例;

const int i1=65536;

const int i2=65536;

int i3=i1*i2;

因為i1,i2

都是const值,

所以編譯器在編譯的時候會嘗試對

i3=i1*i2

進行求值

,並遇到乙個向上溢位

.所以會導致編譯錯誤.

編譯器開關不會覆蓋這一行為,

但是unchecked

關鍵字可以覆蓋這種行為.

int i3=unchecked(i1*i2)可以正常通過編譯.

小數型別

decimal關鍵字表示

128位資料型別

.同浮點型相比

,decimal

型別具有更高的精度和更小的範圍

,這使它適合於財務和後比計算

.decimal

型別的大致範圍和精度看上面的圖.

它使用16

位元組(128位)

儲存每乙個值

.128

位被劃分為

96位整數字

,乙個符號位

,一集乙個可以在

0-28

之間變化的比例因子

.在數學上

,這個比例因子是乙個

10的負指數冪

,表示數值中小數點位置的編號.

例如,如果乙個小數定義等於

12.34,

那麼這個數的儲存方式是整數

0x4d2(

後1234),

以及乙個比例因子2.

只要乙個小數具有(

或小於)28

個有效數字以及

(或小於

)28個小數字置

,decimal 

資料型別就可以準確的儲存它

.對於浮點數而言

,這是不成立的

.\!如果定義乙個

float

值等於12.34,

那麼它會被儲存為

0xc570a4(

或12939428)

除以0x100000(

或1048576),

這個值等於

12.340000152587890625

約等於12.34,

即使將乙個

double

值定義為

12.34,

他也是乙個約等於

12.34的數.

這就是你愛不想讓美分神秘的出現和消失的地方執行計算時應該使用decimal

的原因,

因為浮點數不精確

,浮點資料型別在科學和工程應用方面很合適

,但是在金融應用不好使.

詳解C 的數學類,Math,浮點數 上

c 語言支援表b 1所示的11種數值型別,分別為整數,浮點數和小數。在乙個c 程式中,整數 沒有小數點的數 被認為是乙個int型別 除非其值大於最大的int值 根據資料值,該資料依次被視為uint,long,ulong,帶小數點的數被認為是乙個double值。這就是說 1.0 gettype typ...

詳解C 的數學類,Math,浮點數 上

c 語言支援表b 1所示的11種數值型別,分別為整數,浮點數和小數。在乙個c 程式中,整數 沒有小數點的數 被認為是乙個int型別 除非其值大於最大的int值 根據資料值,該資料依次被視為uint,long,ulong,帶小數點的數被認為是乙個double值。這就是說 1.0 gettype typ...

詳解C 的數學類,Math,浮點數 中

兩種浮點資料型別 float和double,是為了與ansi ieee std 754 1985 它是一種用於二進位制浮點算術的ieee標準 相一致而定義的.float值由24位有符號尾數和乙個8位有符號指數組成。精度大於為小數點後7位。值的範圍是從 3.402823 1038到3.402823 1...