浮點值的上溢和下溢(其他數值型別相似)

2021-09-10 02:55:13 字數 674 閱讀 4016

上文說到,float的取值範圍為10^-37~10^38。

如果數字大小超過10^38會怎麼樣呢?通過本文標題,我們大概可以猜出,這就是乙個浮點值的上溢(emmmm……我彷彿是個沙雕)。當計算導致數字過大,超過當前型別的表達範圍時,就會發生上溢。現在c語言規定,會給toobig賦乙個值表示無窮大的特定值,而且printf()顯示該值為inf或infinity(或具有無窮意義的其他內容)(喵喵喵???有木有大佬解釋下啊,雖然看到我這篇的人可能少之又少了吧!)

當除以乙個很小的數時,情況更複雜。float以指數和尾數部分來儲存。若存在乙個指數部分為最小值的數,這個數就是float能用的精度所能儲存的最小值。現在把他在除以2,通常這個操作會減少指數部分,但現在已經是最小的指數了,所以計算機只能將尾數部分的位向右移,空出乙個二進位制位,並丟棄最後乙個二進位制數。(哦,狗屎,看不懂)。這樣雖然得到了結果,卻原本末尾有效位的數字。這種狀況叫做下溢。當然,如果除以乙個非常大的值就直接歸0了。

還有乙個特殊的浮點值nan(not a number)。例如,給某個函式傳遞乙個值,該函式將返回乙個角度。該角度的正弦就是傳入函式的值。但是正弦值不能大於1,所以傳入的引數如果大於一,,該函式的行為是為定義的。在這種情況下,該函式將返回nan值。

一般來說,如果你進行了不正確的操作,例如除以0,陣列越界?會返回這個nan。

資料結構 處理對列的上溢和下益問題

對應於演算法導論中的p131,重寫enqueue和dequeue,使之能夠處理佇列的上溢和下益 include include using namespace std define maxsize 100 typedef struct queue sqqueue 兩個假定,隊尾指標指示隊尾元素在陣列...

浮點型數和整型數之間的運算小問題

在運算時候,乙個整型數與乙個浮點數進行計算時,他的返回結果是浮點型,你可以理解這個整型數先被編譯器變成了浮點型數,再和那個浮點型數進行計算 如果你把這個浮點型的結果在賦值給乙個整型數,那麼這個結果就會再轉換成整型數 轉換結果只取了浮點型的整數部分 如果你直接輸出乙個整型數與乙個浮點型數的運算結果,那...

尋找和為定值的數

尋找和為定值的兩個數 include using namespace std include 排序夾逼 時間複雜度為o nlogn n o nlogn 空間複雜度 o 1 void twosum int a,unsigned int length,int sum else void funtest ...