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

From: Masaya TARUI <tarui@...>
Date: 2014-06-23 09:54:54 UTC
List: ruby-list #49846
たるいといいます。

浮動小数点で扱う場合、誤差はC言語でもあるのでそのあたりはfloat型の誤差について調べてみてください。

そのうえで、、、
C言語でprintfすると「3.140000」と表示されると思います。たぶん。
これと同じ表示がほしいなら、String#%
(http://docs.ruby-lang.org/ja/2.1.0/class/String.html#I_--25)
を使ってください。
具体的には、
p "%f" % [sss].pack("H*").unpack("f")
とすれば
結果は「3.140000」と表示されると思います。



2014年6月23日 16:55 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]
>
>


-- 
樽家昌也(Masaya TARUI)
No Tool,No Life.

In This Thread