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

jxtaharaと申します.

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

えぐち@エスアンドイーです。

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

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

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

From: junichirou tahara <taharajunichirou@...>
Date: 2014-06-23 10:13:12 UTC
List: ruby-list #49849
横塚様
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
>

In This Thread