From: Daisuke Yokotsuka Date: 2014-06-23T19:00:45+09:00 Subject: [ruby-list:49848] Re: ruby でfloat(32bit浮動小数点)の数値をHEX表示する手法は? 横塚です。 32ビットのfloatなので、精度はそんなものでしょう。 仮数部は23ビットなので、10進数で7桁分です。 [3.140000104904175] ちゃんと7桁分は正しい数値になってます。 の、 "[ruby-list:49845] Re:rubyでfloat(32bit浮動小数点)の数値をHEX表示する手法は?" において、 "junichirou tahara "さんは書きました: > > jxtaharaです. > ミスタイプしていました. > -3.14になっているので,負の数になることはありません. > すみませんでした. > > 正しいコード > x=3.14 > s=[x].pack("f") > sss=sprintf("%02X%02X%02x%02X\n", s[0].ord,s[1].ord,s[2].ord,s[3].ord) > p sss > > p [sss].pack("H*").unpack("f") > > です. > > 結果です. > やはり誤差は出ますね. > > [3.140000104904175] > > > 2014年6月23日 16:51 junichirou tahara : > > > jxtaharaです. > > float => HEXができましたが > > HEX => floatですと,問題が発生します. > > > > 1)バージョンによって結果が違います > > 2)丸め誤差が発生します > > > > 結果が,ruby 1.9.3だと結果が負になるのはどうなのでしょう? > > > > 対処方法はあるのでしょうか?? > > > > コード > > x=-3.14 > > s=[x].pack("f") > > sss=sprintf("%02X%02X%02x%02X\n", s[0].ord,s[1].ord,s[2].ord,s[3].ord) > > p sss > > > > p [sss].pack("H*").unpack("f") > > > > 結果 > > > > *Jruby 1.6.6 > > [3.14000010490417] > > > > *ruby 1.9.3p125 (2012-02-16) [i386-mswin32_100] > > [-3.140000104904175] > > > > > > > > > > > > 2014年6月23日 9:57 junichirou tahara : > > > > まつもと様,えぐち様 > >> ありがとうございました. > >> > >> 無事できました. > >> > >> これで,32Gのデータの解析ができます. > >> > >> > >> > >> 2014-06-23 9:34 GMT+09:00 Nobuyoshi Nakada : > >> > >> (2014/06/23 9:29), EGUCHI Osamu wrote: > >>> > % ruby -ve 'p [3.14].pack("f").unpack("h*")' > >>> > ruby 2.0.0p353 (2013-11-22 revision 43784) [amd64-freebsd9] > >>> > ["3c5f8404"] > >>> > >>> hはlow nibble firstなのでHで。 > >>> > >>> $ ruby -e 'p [3.14].pack("f").unpack("H*")' > >>> ["c3f54840"] > >>> > >>> -- > >>> --- 僕の前にBugはない。 > >>> --- 僕の後ろにBugはできる。 > >>> 中田 伸悦 > >>> > >> > >> > > > -- Daisuke Yokotsuka yokots_d@c3-net.ne.jp