[#49838] rubyでfloat(32bit浮動小数点)の数値をHEX表示する手法は? — junichirou tahara <taharajunichirou@...>

anh0YWhhcmHjgajnlLPjgZfjgb7jgZnvvI4NCuePvuWcqO+8jGZsb2F05pWw44KSSEVY44Gn6KGo

14 messages 2014/06/23
[#49840] Re: rubyでfloat(32bit浮動小数点)の数値をHEX表示する手法は? — EGUCHI Osamu <eguchi@...> 2014/06/23

44GI44GQ44Gh77yg44Ko44K544Ki44Oz44OJ44Kk44O844Gn44GZ44CCDQoNCjIwMTTlubQ25pyI

[#49842] Re: rubyでfloat(32bit浮動小数点)の数値をHEX表示する手法は? — Nobuyoshi Nakada <nobu@...> 2014/06/23

(2014/06/23 9:29), EGUCHI Osamu wrote:

[#49843] Re: rubyでfloat(32bit浮動小数点)の数値をHEX表示する手法は? — junichirou tahara <taharajunichirou@...> 2014/06/23

44G+44Gk44KC44Go5qeY77yM44GI44GQ44Gh5qeYDQrjgYLjgorjgYzjgajjgYbjgZTjgZbjgYTj

[#49844] Re: rubyでfloat(32bit浮動小数点)の数値をHEX表示する手法は? — junichirou tahara <taharajunichirou@...> 2014/06/23

anh0YWhhcmHjgafjgZnvvI4NCmZsb2F0ID0+IEhFWOOBjOOBp+OBjeOBvuOBl+OBn+OBjA0KSEVY

[ruby-list:49850] Re: ruby でfloat(32bit浮動小数点)の数値をHEX表示する手法は?

From: Daisuke Yokotsuka <yokots_d@...3-net.ne.jp>
Date: 2014-06-23 13:09:13 UTC
List: ruby-list #49850
横塚です。

えーっと、老婆心ながら・・・
7桁目までではなく、有効数字の7桁ですので、お間違えないように。

例えば
0.00123456789
の場合、7桁目の4ではなく、有効数字7桁目の7まで信用できます。

また
p [sss].pack("H*").unpack("f")
というコードの場合、あまり小さい数字や大きい数字は表示が通常の10進表記でなく
浮動小数点表記になるので、ご注意下さい。

x=0.00001234567
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")

の実行結果は
"40204f37\n"
[1.2345670256763697e-05]
となります。
(処理系は1.9.3p545です)



<CADN2eS7u+TH4diq65Ww6f9zxUaTgmrMUj0O5_EqvQABoVdH-xA@mail.gmail.com> の、
   "[ruby-list:49849] Re:ruby でfloat(32bit浮動小数点)の数値をHEX表示する手法は?" において、
   "junichirou tahara <taharajunichirou@gmail.com>"さんは書きました:

> 
> 横塚様
> jxtaharaです.
> 
> ご説明ありがとうございます.
> 
> 7桁目まで有効とすることで処理します.
> ありがとうございました.
> 
> 
> 
> 2014年6月23日 19:00 Daisuke Yokotsuka <yokots_d@c3-net.ne.jp>:
> 
> > 横塚です。
> >
> > 32ビットのfloatなので、精度はそんなものでしょう。
> > 仮数部は23ビットなので、10進数で7桁分です。
> >
> >  [3.140000104904175]
> >
> > ちゃんと7桁分は正しい数値になってます。
> >
> > <CADN2eS5rFj7eTY95Z0mFumqoGPvE=1Fv3furtBvCD58WGjFmOQ@mail.gmail.com> の、
> >    "[ruby-list:49845] Re:rubyでfloat(32bit浮動小数点)の数値をHEX表示する手法は?" において、
> >    "junichirou tahara <taharajunichirou@gmail.com>"さんは書きました:
> >
> > >
> > > 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 <taharajunichirou@gmail.com>:
> > >
> > > > 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 <taharajunichirou@gmail.com>:
> > > >
> > > > まつもと様,えぐち様
> > > >> ありがとうございました.
> > > >>
> > > >> 無事できました.
> > > >>
> > > >> これで,32Gのデータの解析ができます.
> > > >>
> > > >>
> > > >>
> > > >> 2014-06-23 9:34 GMT+09:00 Nobuyoshi Nakada <nobu@ruby-lang.org>:
> > > >>
> > > >> (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
> >
> 

--
Daisuke Yokotsuka
yokots_d@c3-net.ne.jp

In This Thread