以前もこのBlogで紹介したswfmillは、swf内の情報をXML形式に変換したりその逆変換ができたりするのですが、swf内の実数をXML内では10進表記している関係で、逆変換しても値が元に戻らない場合がありました。しかし、10進数から2進数の変換では、1/5が2進数で表現できないために正確な変換ができないのに対して、2進数から10進数の変換なら誤差のない正確な変換ができるはずです。とりあえず10進数の有効桁数を倍精度浮動小数点の有効桁数より大きくしてみて、パッチをswfmillのMLに送ってみたところ、「netlibにあるdtoa.cとg_fmt.cを使うといいよ」というアドバイスをもらいました。 dtoa.cには、strtod()とdtoa()という関数が実装されています。strtod()が正確に近似方向への丸めを行う文字列からdoubleへの変換で、昨年Ruby 1.8に取り込まれ
![浮動小数点数をできるだけ短い10進数に可逆変換する : DSAS開発者の部屋](https://cdn-ak-scissors.b.st-hatena.com/image/square/da78a05937633f7a2b4b2219826151c370cd607b/height=288;version=1;width=512/https%3A%2F%2Fparts.blog.livedoor.jp%2Fimg%2Fusr%2Fcmn%2Fogp_image%2Flivedoor.png)