(The Madhatterの文脈投稿)
これを見てくれ……
0.3.1を2台の別々のマシンにインストールして、1 bitpenny(0.01)を移動した:
-= 送金前 =-
[bitcoind@box1 ~]$ ~/bin/bitcoind getinfo { “balance” : 1.150000000000, “blocks” : 68717, “connections” : 6, “proxy” : "", “generate” : false, “genproclimit” : -1, “difficulty” : 181.5432893640505 }
[bitcoind@box2 ~]$ ~/bin/bitcoind getinfo { “balance” : 0.000000000000, “blocks” : 68717, “connections” : 22, “proxy” : "", “generate” : false, “genproclimit” : -1, “difficulty” : 181.5432893640505 }
-= 送金後 =-
[bitcoind@box1 ~]$ ~/bin/bitcoind getinfo { “balance” : 1.139999999999, “blocks” : 68717, “connections” : 10, “proxy” : "", “generate” : false, “genproclimit” : -1, “difficulty” : 181.5432893640505 }
[bitcoind@box2 ~]$ ~/bin/bitcoind getinfo { “balance” : 0.010000000000, “blocks” : 68717, “connections” : 20, “proxy” : "", “generate” : false, “genproclimit” : -1, “difficulty” : 181.5432893640505 }
個人的には表示の問題だと思うが、確信は持てない……変だろう?
両マシンともFreeBSD 7.2/amd64で動かしている。
getinfoがJSON-RPCの結果を返すために浮動小数点に変換する際の丸め誤差に違いない。金額を表すために浮動小数点を使用している唯一の場所は、JSON-RPCで値を返す時だ。
1.139999999999はBitcoinが内部的に表現できる精度より長い。
内部的には、以下のどちらかしかありえない:
1.13999999 または
1.14000000
1.139999999999は1.13999999よりも1.14000000にはるかに近いため、1.14000000に違いない。
コードはこうなっている: (double)GetBalance() / (double)COIN.
(今のところ簡単な修正方法が思いつかない)