tmytのらくがき

個人の日記レベルです

53bitのお話の補足

JSONの仕様と書いてしまったのですが、それはいまいち正確ではなくて、JSONの元になったJavascriptの仕様でNumberが53bitの精度しか持っていないため。が正確な表現です。
JSONの仕様では浮動小数点数の精度に関しては言及されていませんが、JSONはJavascriptからの派生なので、JSON中ではInteger型とFloat型の区別がなく、Number型として定義されています。そのために、パーサをJSONの仕様に従って素直に実装するとNumber型を浮動小数点型としてパースしなければいけなくなり、status idが54bitを越えた時点でパース結果がおかしくなるという問題が発生します。
twitter4jのように*1Twitterに特化したJSONパーサを用いた場合、status idの部分を文字列としてパースしたのちに64bit Integer型へ変換を行っているので問題はなくなります。
今回の問題はあくまでも、JSONをJavascriptがパースするようにNumber型を64ビット 浮動小数点数としてパースした場合に発生します。

*1:twitter4jの実装が素直でないという気はありません