比特幣價值為 int64_t 或 double
我想做一個用比特幣值做一些計算的程序。
我知道比特幣在小數點後有 8 位數字(請糾正我)。
如果我儲存該值,因為
double
我擔心在進行計算時可能會失去精度。我要
int64_t
改用嗎?它通常可以儲存 18 位數字,所以如果我乘以 100,000,000,我將能夠以 satoshi 為單位工作並且永遠不會失去精度。之後,我需要除以 100,000,000 才能列印它。
那麼 gcc
quadruple 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 位。