[#29170] Call for Papers Linux Conference 2001 — akira yamada / やまだあきら <akira@...>

18 messages 2001/04/10
[#30213] Re: Call for Papers Linux Conference 2001 — akira yamada / やまだあきら <akira@...> 2001/06/13

[#29190] Time Stamp Copy of File.copy — "たけ(tk)" <ggb03124@...>

 ftools.rb の move では utime を行っていて日付が同じになりますが、copy

42 messages 2001/04/11
[#29193] Re: Time Stamp Copy of File.copy — matz@... (Yukihiro Matsumoto) 2001/04/11

まつもと ゆきひろです

[#29201] Re: Time Stamp Copy of File.copy — " たけ (tk)" <ggb03124@...> 2001/04/11

たけ(tk)です。

[#29203] Re: Time Stamp Copy of File.copy — WATANABE Hirofumi <eban@...> 2001/04/11

わたなべです.

[#29212] Re: Time Stamp Copy of File.copy — Minero Aoki <aamine@...> 2001/04/12

あおきです。

[#29215] Re: Time Stamp Copy of File.copy — " たけ (tk)" <ggb03124@...> 2001/04/12

たけ(tk)です。

[#29220] Re: Time Stamp Copy of File.copy — Minero Aoki <aamine@...> 2001/04/12

あおきです。

[#29234] Re: Time Stamp Copy of File.copy — " たけ (tk)" <ggb03124@...> 2001/04/13

たけ(tk)です。

[#29236] Re: Time Stamp Copy of File.copy — matz@... (Yukihiro Matsumoto) 2001/04/13

まつもと ゆきひろです

[#29238] Array#include! — " たけ (tk)" <ggb03124@...> 2001/04/13

たけ(tk)です。

[#29244] Re: Array#include! — matz@... (Yukihiro Matsumoto) 2001/04/13

まつもと ゆきひろです

[#29348] Open3 — NISHIO Mizuho <mzh@...>

どうも西尾です。

16 messages 2001/04/20

[#29397] rnet.rb 〜高レベルネットライブラリ〜 — rubikitch <rubikitch@...>

るびきちです。

11 messages 2001/04/24

[ruby-list:29355] Re: binary IO of integer and FP / Marshal

From: shudo@...
Date: 2001-04-20 14:33:29 UTC
List: ruby-list #29355
首藤です。

> Marshalで打ち出したデータの中身見てると数字とかは文字列に書き出されてるんで
> エンディアンには依存しない形式なのかと思ってましたがそんな事も無い?

> $ ruby -e 'p Marshal.dump(3.141592)
> '"\004\004f\001\0103.141592"

ええっ!と思って、実験したところ、想像した通り、
marshal, unmarshal の過程で、情報が落ちることがあります。

  f = 1.234567890123456789
  printf "%.20e\n", f
  p Marshal.dump f

を実行すると、以下の出力が得られます:

  1.23456789012345669043e+00
  "\004\003f\001\r1.23456789012"

(IEEE 754 な) 倍精度浮動小数点数は仮数部が 52 bit あるので、
10 進数にして 15 桁くらいの精度はあります。
ところが、marshal 処理で "%.12g" というフォーマットを使っているため、
情報が落ちることがあります。


> # Marshalのソース見りゃええ話でありますが

marshal は:
  sprintf(buf, "%.12g", d)

unmarshal は:
  strtod(buf, 0)

という処理になってます。

marshaling の際に可読表現に変換せずに、バイナリのまま
書き出した方がいいんじゃないかと思いますが、いかがでしょう。
(バイトオーダを揃えるくらいはしてもいいかも。)

そうすれば、正負の無限大 (Inf)、NaN にも対応できますし。


Kazuyuki Shudo/首藤一幸   私をたばねないで あらせいとうの花のように
  shudo@computer.org

In This Thread