-
-
Notifications
You must be signed in to change notification settings - Fork 9
Satoshi float
Satoshi Float is a very space efficient representation of bitcoin amounts from 0 to 21 million bitcoins. When serialized, its footprint is only 8 bits. It is obvious that it is not sufficient for most uses but it can be used to describe the magnitude of bitcoins in accuracy of about ±7 percent.
Like standardized binary floating point values (IEEE 754) they preserve ordinality. The most significant difference is that Satoshi float is defined as integer sequence.
Satoshi float has 256 possible values and is defined as a sequence:
The sequence is designed so it is fast to calculate. Dividing by 2^13 followed by floor function can be replaced by a bit shift of 13. The multiplier is selected in a way it can be precisely calculated using 64 bit unsigned integer.
Because maximum number of bitcoins is 20999999.9769, the largest possible bitcoin value is passed at byte value 255. That value can be used to represent maximum number of bitcoins (see * in the table below).
The following graph illustrates Satoshi Float accuracy and range. Please note the logarithmic scale of range.
Haskell source code for converting byte value to satoshis:
import Data.Bits
import Data.Word
satoshiFloatIterator :: Integer -> Integer
satoshiFloatIterator n = ((9357*n) `shiftR` 13) + 1
byteToSatoshi :: Word8 -> Integer
byteToSatoshi i = iterate satoshiFloatIterator 0 !! fromIntegral i
Conversion to and from Satoshi floats in C:
uint64_t byte2satoshi(uint8_t n)
{
uint64_t a = 0;
while (n--) {
a = (9357 * a >> 13) + 1;
}
return a;
}
uint8_t satoshi2byte(const uint64_t x)
{
uint8_t i = 0;
uint64_t a = 0;
while (a < x && i < 255) {
++i;
a = (9357 * a >> 13) + 1;
}
return i;
}
Byte | Hex | Satoshi | Pretty |
---|---|---|---|
0 | 00 |
0 | 0 Ƀ |
1 | 01 |
1 | 0.01 µɃ |
2 | 02 |
2 | 0.02 µɃ |
3 | 03 |
3 | 0.03 µɃ |
4 | 04 |
4 | 0.04 µɃ |
5 | 05 |
5 | 0.05 µɃ |
6 | 06 |
6 | 0.06 µɃ |
7 | 07 |
7 | 0.07 µɃ |
8 | 08 |
8 | 0.08 µɃ |
9 | 09 |
10 | 0.10 µɃ |
10 | 0A |
12 | 0.12 µɃ |
11 | 0B |
14 | 0.14 µɃ |
12 | 0C |
16 | 0.16 µɃ |
13 | 0D |
19 | 0.19 µɃ |
14 | 0E |
22 | 0.22 µɃ |
15 | 0F |
26 | 0.26 µɃ |
16 | 10 |
30 | 0.30 µɃ |
17 | 11 |
35 | 0.35 µɃ |
18 | 12 |
40 | 0.40 µɃ |
19 | 13 |
46 | 0.46 µɃ |
20 | 14 |
53 | 0.53 µɃ |
21 | 15 |
61 | 0.61 µɃ |
22 | 16 |
70 | 0.70 µɃ |
23 | 17 |
80 | 0.80 µɃ |
24 | 18 |
92 | 0.92 µɃ |
25 | 19 |
106 | 1.06 µɃ |
26 | 1A |
122 | 1.22 µɃ |
27 | 1B |
140 | 1.40 µɃ |
28 | 1C |
160 | 1.60 µɃ |
29 | 1D |
183 | 1.83 µɃ |
30 | 1E |
210 | 2.10 µɃ |
31 | 1F |
240 | 2.40 µɃ |
32 | 20 |
275 | 2.75 µɃ |
33 | 21 |
315 | 3.15 µɃ |
34 | 22 |
360 | 3.60 µɃ |
35 | 23 |
412 | 4.12 µɃ |
36 | 24 |
471 | 4.71 µɃ |
37 | 25 |
538 | 5.38 µɃ |
38 | 26 |
615 | 6.15 µɃ |
39 | 27 |
703 | 7.03 µɃ |
40 | 28 |
803 | 8.03 µɃ |
41 | 29 |
918 | 9.18 µɃ |
42 | 2A |
1049 | 10.49 µɃ |
43 | 2B |
1199 | 11.99 µɃ |
44 | 2C |
1370 | 13.70 µɃ |
45 | 2D |
1565 | 15.65 µɃ |
46 | 2E |
1788 | 17.88 µɃ |
47 | 2F |
2043 | 20.43 µɃ |
48 | 30 |
2334 | 23.34 µɃ |
49 | 31 |
2666 | 26.66 µɃ |
50 | 32 |
3046 | 30.46 µɃ |
51 | 33 |
3480 | 34.80 µɃ |
52 | 34 |
3975 | 39.75 µɃ |
53 | 35 |
4541 | 45.41 µɃ |
54 | 36 |
5187 | 51.87 µɃ |
55 | 37 |
5925 | 59.25 µɃ |
56 | 38 |
6768 | 67.68 µɃ |
57 | 39 |
7731 | 77.31 µɃ |
58 | 3A |
8831 | 88.31 µɃ |
59 | 3B |
10087 | 100.87 µɃ |
60 | 3C |
11522 | 115.22 µɃ |
61 | 3D |
13161 | 131.61 µɃ |
62 | 3E |
15033 | 150.33 µɃ |
63 | 3F |
17171 | 171.71 µɃ |
64 | 40 |
19613 | 196.13 µɃ |
65 | 41 |
22403 | 224.03 µɃ |
66 | 42 |
25589 | 255.89 µɃ |
67 | 43 |
29229 | 292.29 µɃ |
68 | 44 |
33386 | 333.86 µɃ |
69 | 45 |
38134 | 381.34 µɃ |
70 | 46 |
43558 | 435.58 µɃ |
71 | 47 |
49753 | 497.53 µɃ |
72 | 48 |
56829 | 568.29 µɃ |
73 | 49 |
64911 | 649.11 µɃ |
74 | 4A |
74143 | 741.43 µɃ |
75 | 4B |
84688 | 846.88 µɃ |
76 | 4C |
96732 | 967.32 µɃ |
77 | 4D |
110489 | 1.10 mɃ |
78 | 4E |
126202 | 1.26 mɃ |
79 | 4F |
144150 | 1.44 mɃ |
80 | 50 |
164650 | 1.65 mɃ |
81 | 51 |
188066 | 1.88 mɃ |
82 | 52 |
214812 | 2.15 mɃ |
83 | 53 |
245361 | 2.45 mɃ |
84 | 54 |
280255 | 2.80 mɃ |
85 | 55 |
320111 | 3.20 mɃ |
86 | 56 |
365635 | 3.66 mɃ |
87 | 57 |
417633 | 4.18 mɃ |
88 | 58 |
477026 | 4.77 mɃ |
89 | 59 |
544865 | 5.45 mɃ |
90 | 5A |
622352 | 6.22 mɃ |
91 | 5B |
710858 | 7.11 mɃ |
92 | 5C |
811951 | 8.12 mɃ |
93 | 5D |
927421 | 9.27 mɃ |
94 | 5E |
1059312 | 10.59 mɃ |
95 | 5F |
1209959 | 12.10 mɃ |
96 | 60 |
1382030 | 13.82 mɃ |
97 | 61 |
1578572 | 15.79 mɃ |
98 | 62 |
1803064 | 18.03 mɃ |
99 | 63 |
2059482 | 20.59 mɃ |
100 | 64 |
2352365 | 23.52 mɃ |
101 | 65 |
2686900 | 26.87 mɃ |
102 | 66 |
3069010 | 30.69 mɃ |
103 | 67 |
3505460 | 35.05 mɃ |
104 | 68 |
4003979 | 40.04 mɃ |
105 | 69 |
4573393 | 45.73 mɃ |
106 | 6A |
5223784 | 52.24 mɃ |
107 | 6B |
5966669 | 59.67 mɃ |
108 | 6C |
6815201 | 68.15 mɃ |
109 | 6D |
7784404 | 77.84 mɃ |
110 | 6E |
8891439 | 88.91 mɃ |
111 | 6F |
10155908 | 101.56 mɃ |
112 | 70 |
11600200 | 116.00 mɃ |
113 | 71 |
13249887 | 132.50 mɃ |
114 | 72 |
15134179 | 151.34 mɃ |
115 | 73 |
17286440 | 172.86 mɃ |
116 | 74 |
19744778 | 197.45 mɃ |
117 | 75 |
22552721 | 225.53 mɃ |
118 | 76 |
25759987 | 257.60 mɃ |
119 | 77 |
29423365 | 294.23 mɃ |
120 | 78 |
33607719 | 336.08 mɃ |
121 | 79 |
38387138 | 383.87 mɃ |
122 | 7A |
43846247 | 438.46 mɃ |
123 | 7B |
50081706 | 500.82 mɃ |
124 | 7C |
57203922 | 572.04 mɃ |
125 | 7D |
65339002 | 653.39 mɃ |
126 | 7E |
74630987 | 746.31 mɃ |
127 | 7F |
85244403 | 852.44 mɃ |
128 | 80 |
97367173 | 973.67 mɃ |
129 | 81 |
111213946 | 1.11 Ƀ |
130 | 82 |
127029895 | 1.27 Ƀ |
131 | 83 |
145095060 | 1.45 Ƀ |
132 | 84 |
165729307 | 1.66 Ƀ |
133 | 85 |
189297989 | 1.89 Ƀ |
134 | 86 |
216218419 | 2.16 Ƀ |
135 | 87 |
246967255 | 2.47 Ƀ |
136 | 88 |
282088942 | 2.82 Ƀ |
137 | 89 |
322205351 | 3.22 Ƀ |
138 | 8A |
368026791 | 3.68 Ƀ |
139 | 8B |
420364586 | 4.20 Ƀ |
140 | 8C |
480145439 | 4.80 Ƀ |
141 | 8D |
548427841 | 5.48 Ƀ |
142 | 8E |
626420814 | 6.26 Ƀ |
143 | 8F |
715505317 | 7.16 Ƀ |
144 | 90 |
817258698 | 8.17 Ƀ |
145 | 91 |
933482622 | 9.33 Ƀ |
146 | 92 |
1066234973 | 10.66 Ƀ |
147 | 93 |
1217866290 | 12.18 Ƀ |
148 | 94 |
1391061387 | 13.91 Ƀ |
149 | 95 |
1588886890 | 15.89 Ƀ |
150 | 96 |
1814845536 | 18.15 Ƀ |
151 | 97 |
2072938194 | 20.73 Ƀ |
152 | 98 |
2367734703 | 23.68 Ƀ |
153 | 99 |
2704454788 | 27.04 Ƀ |
154 | 9A |
3089060480 | 30.89 Ƀ |
155 | 9B |
3528361684 | 35.28 Ƀ |
156 | 9C |
4030136753 | 40.30 Ƀ |
157 | 9D |
4603270215 | 46.03 Ƀ |
158 | 9E |
5257910084 | 52.58 Ƀ |
159 | 9F |
6005647542 | 60.06 Ƀ |
160 | A0 |
6859722175 | 68.60 Ƀ |
161 | A1 |
7835256396 | 78.35 Ƀ |
162 | A2 |
8949523206 | 89.50 Ƀ |
163 | A3 |
10222252032 | 102.22 Ƀ |
164 | A4 |
11675978060 | 116.76 Ƀ |
165 | A5 |
13336441249 | 133.36 Ƀ |
166 | A6 |
15233042086 | 152.33 Ƀ |
167 | A7 |
17399362159 | 173.99 Ƀ |
168 | A8 |
19873758756 | 198.74 Ƀ |
169 | A9 |
22700044029 | 227.00 Ƀ |
170 | AA |
25928260740 | 259.28 Ƀ |
171 | AB |
29615568329 | 296.16 Ƀ |
172 | AC |
33827254988 | 338.27 Ƀ |
173 | AD |
38637893668 | 386.38 Ƀ |
174 | AE |
44132662482 | 441.33 Ƀ |
175 | AF |
50408852887 | 504.09 Ƀ |
176 | B0 |
57577592342 | 575.78 Ƀ |
177 | B1 |
65765811957 | 657.66 Ƀ |
178 | B2 |
75118493956 | 751.18 Ƀ |
179 | B3 |
85801238763 | 858.01 Ƀ |
180 | B4 |
98003197157 | 980.03 Ƀ |
181 | B5 |
111940419409 | 1.12 kɃ |
182 | B6 |
127859680715 | 1.28 kɃ |
183 | B7 |
146042850641 | 1.46 kɃ |
184 | B8 |
166811883966 | 1.67 kɃ |
185 | B9 |
190534521274 | 1.91 kɃ |
186 | BA |
217630800240 | 2.18 kɃ |
187 | BB |
248580492902 | 2.49 kɃ |
188 | BC |
283931600597 | 2.84 kɃ |
189 | BD |
324310056981 | 3.24 kɃ |
190 | BE |
370430810934 | 3.70 kɃ |
191 | BF |
423110485585 | 4.23 kɃ |
192 | C0 |
483281837600 | 4.83 kɃ |
193 | C1 |
552010272757 | 5.52 kɃ |
194 | C2 |
630512710228 | 6.31 kɃ |
195 | C3 |
720179129591 | 7.20 kɃ |
196 | C4 |
822597182079 | 8.23 kɃ |
197 | C5 |
939580301845 | 9.40 kɃ |
198 | C6 |
1073199814986 | 10.73 kɃ |
199 | C7 |
1225821614847 | 12.26 kɃ |
200 | C8 |
1400148052994 | 14.00 kɃ |
201 | C9 |
1599265787582 | 15.99 kɃ |
202 | CA |
1826700436329 | 18.27 kɃ |
203 | CB |
2086479001799 | 20.86 kɃ |
204 | CC |
2383201174297 | 23.83 kɃ |
205 | CD |
2722120774890 | 27.22 kɃ |
206 | CE |
3109238780597 | 31.09 kɃ |
207 | CF |
3551409578864 | 35.51 kɃ |
208 | D0 |
4056462332695 | 40.56 kɃ |
209 | D1 |
4633339605350 | 46.33 kɃ |
210 | D2 |
5292255699129 | 52.92 kɃ |
211 | D3 |
6044877511811 | 60.45 kɃ |
212 | D4 |
6904531113040 | 69.05 kɃ |
213 | D5 |
7886437698330 | 78.86 kɃ |
214 | D6 |
9007983098545 | 90.08 kɃ |
215 | D7 |
10289025616832 | 102.89 kɃ |
216 | D8 |
11752247643640 | 117.52 kɃ |
217 | D9 |
13423557275579 | 134.24 kɃ |
218 | DA |
15332547049267 | 153.33 kɃ |
219 | DB |
17513017912597 | 175.13 kɃ |
220 | DC |
20003577710959 | 200.04 kɃ |
221 | DD |
22848324785333 | 228.48 kɃ |
222 | DE |
26097628786177 | 260.98 kɃ |
223 | DF |
29809022528352 | 298.09 kɃ |
224 | E0 |
34048220678442 | 340.48 kɃ |
225 | E1 |
38890283311546 | 388.90 kɃ |
226 | E2 |
44420944939714 | 444.21 kɃ |
227 | E3 |
50738132544056 | 507.38 kɃ |
228 | E4 |
57953699489104 | 579.54 kɃ |
229 | E5 |
66195406020453 | 661.95 kɃ |
230 | E6 |
75609181412766 | 756.09 kɃ |
231 | E7 |
86361707822175 | 863.62 kɃ |
232 | E8 |
98643371593273 | 986.43 kɃ |
233 | E9 |
112671634277131 | 1.13 MɃ |
234 | EA |
128694883048232 | 1.29 MɃ |
235 | EB |
146996828696571 | 1.47 MɃ |
236 | EC |
167901529066628 | 1.68 MɃ |
237 | ED |
191779126889214 | 1.92 MɃ |
238 | EE |
219052403601365 | 2.19 MɃ |
239 | EF |
250204265197507 | 2.50 MɃ |
240 | F0 |
285786292657846 | 2.86 MɃ |
241 | F1 |
326428508349545 | 3.26 MɃ |
242 | F2 |
372850531326501 | 3.73 MɃ |
243 | F3 |
425874319045663 | 4.26 MɃ |
244 | F4 |
486438721107211 | 4.86 MɃ |
245 | F5 |
555616102709983 | 5.56 MɃ |
246 | F6 |
634631332160317 | 6.35 MɃ |
247 | F7 |
724883468630870 | 7.25 MɃ |
248 | F8 |
827970534177131 | 8.28 MɃ |
249 | F9 |
945717808629812 | 9.46 MɃ |
250 | FA |
1080210148358051 | 10.80 MɃ |
251 | FB |
1233828901145787 | 12.34 MɃ |
252 | FC |
1409294070803361 | 14.09 MɃ |
253 | FD |
1609712478089240 | 16.10 MɃ |
254 | FE |
1838632770688601 | 18.39 MɃ |
255 | FF |
2100108256266265 | *21.00 MɃ |