比特币与对数

解释另外一个知识:不少老师在讲解难度控制时会说到前导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)的数据处理到能够比较直观理解的范围,但是这个过程会导致精度的丢失。

 

古人云差之毫厘,谬以千里,计算机是一门精确的科学,需要精确的描述,绝不可做差不多先生。

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