[#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:49845] Re: rubyでfloat(32bit浮動小数点)の数値をHEX表示する手法は?

From: junichirou tahara <taharajunichirou@...>
Date: 2014-06-23 07:55:12 UTC
List: ruby-list #49845
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はできる。
>>>     中田 伸悦
>>>
>>
>>
>

In This Thread