[#48044] Re: ruby 1.9.2とRails3 へのアップグレード — "Endo Akira" <endo4917@...>

アスカルさん

12 messages 2011/05/04
[#48045] Re: ruby 1.9.2とRails3 へのアップグレード — "Y. NOBUOKA" <nobuoka@...> 2011/05/04

GyRCJSIlOSUrJWskNSRzGyhCCgobJEI/LjIsJEckOSEjGyhCCgo+IBskQjFzRiMkRyQ5ISMbKEIK

[#48062] 小数点つき時刻情報とTime#parse — Mitsuo KASAHARA <m.kasahara13@...>

笠原ともうします。

18 messages 2011/05/09
[#48068] Re: 小数点つき時刻情報とTime#parse — Tanaka Akira <akr@...> 2011/05/09

2011年5月9日10:29 Mitsuo KASAHARA <m.kasahara13@gmail.com>:

[#48070] Re: 小数点つき時刻情報とTime#parse — EGUCHI Osamu <eguchi@...> 2011/05/09

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

[#48072] Re: 小数点つき時刻情報とTime#parse — Tanaka Akira <akr@...> 2011/05/09

2011年5月9日13:43 EGUCHI Osamu <eguchi@sandeinc.com>:

[#48092] 後継者募集 — MoonWolf <moonwolf@...>

MoonWolfです。

22 messages 2011/05/22
[#48095] Re: 後継者募集 — Youhei SASAKI <uwabami@...> 2011/05/23

MoonWolf 様: 佐々木と申します.

[#48096] Re: 後継者募集 — MoonWolf <moonwolf@...> 2011/05/23

MoonWolfです。

[ruby-list:48081] Re: 小数点つき時刻情報とTime#parse

From: EGUCHI Osamu <eguchi@...>
Date: 2011-05-10 07:08:59 UTC
List: ruby-list #48081
2011年5月10日15:22 Tanaka Akira <akr@fsij.org>:
> 2011年5月10日14:28 EGUCHI Osamu <eguchi@sandeinc.com>:
>>> 条件なしで使われているんですか?
>>> 存在する時だけに使われるのでなく?
>>
>> 1.8と1.9の実装では方針が違うようで、、
>
> 64bit 整数型の存在に関する仮定に関して、
> 1.9 で変化したという覚えはないんですが、
> なにかありましたっけ?

64bit 整数型の有無により条件コンパイルで
ある場合は処理系の組み込み型を使い、
必要に応じてBignumにシフトチェンジするようです。

>> 1.9では64bit 整数型が存在しない場合、自前の倍長演算ルーチンを呼んでいました。
>> #Timeの内部表現もスケーリングがナノセコンドになっていました
>
> time.c の中身は知っていますが、自前の倍長演算ルーチンという
> 覚えはないですね。

wideint_t の事です。
32bitにおける倍長はその一部の特徴で、Bignumを適宜使っているようですね。

===
% ruby18 -ve 'p Time.at(10**99)'
ruby 1.8.7 (2010-08-16 patchlevel 302) [amd64-freebsd8]
-e:1:in `at': bignum too big to convert into `long' (RangeError)
        from -e:1
% ruby19 -ve 'p Time.at(10**99)'
ruby 1.9.2p0 (2010-08-18 revision 29036) [amd64-freebsd8]
31688738506811430964562103462970695015158624952118316116207927812546661667451279832095319667-05-08
10:46:40 +0900
% ruby19 -ve 'p Time.at(10**99,234.567)-Time.at(10**99,123.456)'
ruby 1.9.2p0 (2010-08-18 revision 29036) [amd64-freebsd8]
0.000111111
===

その意味で

2011年5月9日14:23 Tanaka Akira <akr@fsij.org>:
> C に Bignum が組み込まれてればいいんですが。

という田中さんの指摘を支持します。

>> いま話題にしている1.8では64bit 整数型をイミュレーションするコードはないですが、
>> そのようなプラットホームでも [ruby-list:48070]で私が示したワークアラウンドは有効です。
>
> 理解できません。

ワークアラウンド=
Cで書かれたTime同士の引き算の桁落ちを Rubyで書いたメソッドで
回避することができているという意味です。
#そのようなプラットホーム=bccでコンパイルされた環境

> パッチの形で書いていただけると理解できるかもしれません。
>
> なお、私の案はパッチとして [ruby-list:48068] に書きました。

Cで書かれたメソッドを計算結果に変化がある形で変更するのは
(それが精度向上であっても)1.8 には取り込むべきではない
と言うのが私のスタンスです。

そもそも、時刻の差を Float で返すのは difftime() からの流れなのでしょうが、
溢れや丸め桁落ちなどの厄介を持ち込んでしまいました。
# 時刻の差(期間?)を示すクラスを用意すればよかった?

Time#at() にマイクロ秒を指定する第二引数を追加した時に見直すべきでしたが、
結果論ですね。

 えぐち

In This Thread