比特幣與對數

解釋另外一個知識:不少老師在講解難度控制時會說到前導0的個數,前導0的個數越多,那麼挖礦的難度越大。

顯然如果只是以leadingZero作爲難度的控制會導致難度劇烈的波動,難度要麼加倍,要麼減半。1%這樣的變化率則無法表示。

前導0對應數學中的一個重要的知識,對數尺。

System.out.println(difficulty.bitLength());  // 224  log2(difficulty)

區塊1對應的難度值爲 0x1d00ffff

二進制爲

11111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 bitLength爲224,前導0的個數爲32個0

加上前導0的個數湊滿256個bit位

0000000000000000000000000000000011111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

區塊768934對應的難度值爲 0x1707f590

二進制爲11111110101100100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000, bitLength爲179, 前導0的個數爲77.

加上前導0的個數湊滿256個bit位

0000000000000000000000000000000000000000000000000000000000000000000000000000011111110101100100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

通過比較上述的兩個數能得到一個結論:前導0的個數越多,數值越小,挖礦難度越大,但這並不是一個精確的描述。00010000, 00011111 前導0的個數相同,但是這兩個數相差還是挺大。

0, 32, 179,224,256 在數軸上的排序:

 

 

這裏之所以引入32,因爲32個bit位就是4個字節。難度值降爲4個字節以內的是不可能。

對數的魅力在於能將相差很大很大(10^12,10^13)的數據處理到能夠比較直觀理解的範圍,但是這個過程會導致精度的丟失。

 

古人云差之毫釐,謬以千里,計算機是一門精確的科學,需要精確的描述,絕不可做差不多先生。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章