soj 4392 double型別的使用和二分查詢

2021-06-27 21:39:25 字數 1153 閱讀 8027

背景:周賽a題因為資料範圍wa了一晚上!!!

心得:總是想著偷懶,想著資料弱就好了,這樣就換來無數個wa。比賽的時候必須要考慮所有極限情況做到無乙個遺漏。

學習:1.double資料可以來表示long long無法表示的更大位數。

float與double的範圍和精度

1. 範圍

float和double的範圍是由指數的位數來決定的。

float的指數字有8位,而double的指數字有11位,分布如下:

float:

1bit(符號位) 8bits(指數字) 23bits(尾數字)

double:

1bit(符號位) 11bits(指數字) 52bits(尾數字)

於是,float的指數範圍為-127~+128,而double的指數範圍為-1023~+1024,並且指數字是按補碼的形式來劃分的。

其中負指數決定了浮點數所能表達的絕對值最小的非零數;而正指數決定了浮點數所能表達的絕對值最大的數,也即決定了浮點數的取值範圍。

float的範圍為-2^128 ~ +2^128,也即-3.40e+38 ~ +3.40e+38;double的範圍為-2^1024 ~ +2^1024,也即-1.79e+308 ~ +1.79e+308。

2.  精度

float和double的精度是由尾數的位數來決定的。浮點數在記憶體中是按科學計數法來儲存的,其整數部分始終是乙個隱含著的「1」,由於它是不變的,故不能對精度造成影響。

float:2^23 = 8388608,一共七位,這意味著最多能有7位有效數字,但絕對能保證的為6位,也即float的精度為6~7位有效數字;

double:2^52 = 4503599627370496,一共16位,同理,double的精度為15~16位。

2.其實這個題可以分類討論,可以不把右界只設為1e7,根據a,b,c是否為0,可以來設定。如果a==0&&b==0&&c!=0時才是1e7,如果a==0&&b!=0時為1e4即可,如果a!=0,1e3即可。

3.這其實已經考慮到了數學函式題是否嚴密。

#include#includeint main(void)else

if(max-min<=1)

} printf("%d\n",f);

} return 0;

}

double型別運算異常

對於兩個double型別的數值運算,有時會出現結果值異常的情況。看如下 public class doubletest 對於以上的四則運算,我們可以很容易的計算出結果39.99,0.34,3.3 0.123,然而計算機執行結果如下 j a中的簡單浮點數型別float和double不能夠進行運算,因為...

C 之Float型別, double型別

c 裡的小數分為float和double兩種型別,這兩種型別,直接看 及執行結果我們來看一下他們有什麼區別 include iostream using namespace std int main 再來看 的執行結果 接下來分析一下 邏輯很簡單,這裡只說一行 cout.setf ios base ...

Calendar 日期double型別查詢處理

系統中將calendar生產的時間轉換為了double型別儲存到資料庫中。因此在查詢時間時需要對傳入的日期進行轉換。查詢具體某一天的資料,思路是查詢當天0點到23點的資料。時間精確到毫秒,儲存資料的時候擴大了1000倍 獲取指定日期0點 public static double todayfirst...