C++

比特幣價值為 int64_t 或 double

  • August 11, 2019

我想做一個用比特幣值做一些計算的程序。

我知道比特幣在小數點後有 8 位數字(請糾正我)。

如果我儲存該值,因為double我擔心在進行計算時可能會失去精度。

我要int64_t改用嗎?它通常可以儲存 18 位數字,所以如果我乘以 100,000,000,我將能夠以 satoshi 為單位工作並且永遠不會失去精度。

之後,我需要除以 100,000,000 才能列印它。

那麼 gccquadruple precision呢?

或者我應該改用 GNU MP 庫嗎?

您可以使用相同類型的比特幣核心來儲存 satoshi 的值,即 int64_t。數字始終是 int,我認為您可以使用 long 類型,因為 RPC 框架響應也使用比特幣中的轉換,而包裝庫使用 long 類型

我想做一個用比特幣值做一些計算的程序。

我知道比特幣在小數點後有 8 位數字(請糾正我)。

比特幣在程式碼級別沒有小數點。也沒有“比特幣”單位。只有聰。並且最好始終堅持使用整數類型而不是浮點類型進行計算。

我應該改用 int64_t 嗎?它通常可以儲存 18 位數字,所以如果我乘以 100,000,000,我將能夠以 satoshi 為單位工作並且永遠不會失去精度。

位數無關緊要,二進制數的大小很重要。

由於您可以作為比特幣“金額”的最大值為 2100000000000000(2100 萬比特幣或 2100 萬 * 10^8 聰),並且該值為 7 字節(0x0775f05a074000),因此您需要一個 8 字節(64 位)整數。因此,您的選項是有符號或無符號 64 位整數值類型。符號無關緊要,因為由於最大值的大小,從未設置最高有效位。

順便說一句,64 位有符號整數的最大值為 9,223,372,036,854,775,807,即 19 位。

引用自:https://bitcoin.stackexchange.com/questions/89648