[#32185] Date#+に大きな数字を与えるとおかしな日付に — "madoka yamamoto" <yamamotomadoka@...>

こんにちは、山本と申します。

26 messages 2007/11/08
[#32186] Re: Date#+に大きな数字を与えるとおかしな日付に — Tadayoshi Funaba <tadf@...> 2007/11/08

> Dateオブジェクトに+で大きな数字を与えるとおかしくなるようです。

[#32188] Re: Date#+に大きな数字を与えるとおかしな日付に — "madoka yamamoto" <yamamotomadoka@...> 2007/11/09

山本です。

[#32191] Re: Date#+に大きな数字を与えるとおかしな日付に — tadf@... 2007/11/09

> アルゴリズムの意味がわからないで書いた、表層的なパッチなので

[#32194] Re: Date#+に大きな数字を与えるとおかしな日付に — Yukihiro Matsumoto <matz@...> 2007/11/09

Hi,

[#32200] Re: rational (Re: Date#+に大きな数字を与えるとおかしな日付に) — Tadayoshi Funaba <tadf@...> 2007/11/10

> 1.9ではRationalとComplexを組み込みに、という話はありましたが、

[#32225] Re: rational (Re: Date#+に大きな数字を与えるとおかしな日付に) — Shin-ichiro HARA <sinara@...> 2007/11/12

原です。

[#32198] [提案] Array#tail — "Yusuke ENDOH" <mame@...>

遠藤と申します。

21 messages 2007/11/09
[#32199] Re: [提案] Array#tail — Yukihiro Matsumoto <matz@...> 2007/11/10

まつもと ゆきひろです

[#32352] 1.9.1のリリース時期について — KIMURA Koichi <hogemuta@...>

木村です。

16 messages 2007/11/24
[#32353] Re: 1.9.1のリリース時期について — Yukihiro Matsumoto <matz@...> 2007/11/24

まつもと ゆきひろです

[#32403] Next 1.8.6 patch release? (was Re: 1.9.1のリリース時期について) — Takahiro Kambe <taca@...>

こんばんは。

32 messages 2007/11/29
[#32414] Re: Next 1.8.6 patch release? (was Re: 1.9.1のリリース時期について) — Urabe Shyouhei <shyouhei@...> 2007/11/30

卜部です。

[#32444] Re: Next 1.8.6 patch release? (was Re: 1.9.1のリリース時期について) — Yukihiro Matsumoto <matz@...> 2007/12/03

まつもと ゆきひろです

[#32488] Re: Next 1.8.6 patch release? (was Re: 1.9.1のリリース時期について) — Urabe Shyouhei <shyouhei@...> 2007/12/08

卜部です。

[#32525] Re: Next 1.8.6 patch release? (was Re: 1.9.1のリリース時期について) — "Yusuke ENDOH" <mame@...> 2007/12/10

遠藤と申します。

[#32643] Re: Next 1.8.6 patch release? (was Re: 1.9.1のリリース時期について) — "Yusuke ENDOH" <mame@...> 2007/12/19

遠藤です。

[#32409] Re: [ruby-cvs:21293] Ruby:r14056 (trunk): * signal.c (trap_signm): SIGVTALRM no longer used for green — SASADA Koichi <ko1@...>

 ささだです.

10 messages 2007/11/30

[ruby-dev:32190] Re: Date#+に大きな数字を与えるとおかしな日付に

From: "madoka yamamoto" <yamamotomadoka@...>
Date: 2007-11-09 02:00:35 UTC
List: ruby-dev #32190
山本です。

> 見たところ、to_iを使うというのが本来の目的ではなくて、整数演算で
> 済まそうとしているのではないかと思えます。なので、

いやそうではなくrationalを使ってるつもりだったんですが、、
手元で試したときはDateの中で(整数 / 整数)がrationalになってた気がしたんですが、、
今確認したらmathnを自前でrequireしてました。
だとすると今までのメールすごい意味わからなかったですねすみません。

意図としてはfloatは使わないようにしてrationalを使うことでした。

あらためてパッチにすると以下のようになりますが、、
これでは副作用があってだめですね。

Index: date.rb
===================================================================
--- date.rb     (revision 13837)
+++ date.rb     (working copy)
@@ -195,6 +195,7 @@

 require 'rational'
 require 'date/format'
+require 'mathn'

 # Class representing a date.
 #
@@ -385,10 +386,10 @@
        y -= 1
        m += 12
       end
-      a = (y / 100.0).floor
-      b = 2 - a + (a / 4.0).floor
-      jd = (365.25 * (y + 4716)).floor +
-       (30.6001 * (m + 1)).floor +
+      a = (y / 100).to_i
+      b = 2 - a + (a / 4).to_i
+      jd = ((36525 / 100) * (y + 4716)).to_i +
+       ((306001 / 10000) * (m + 1)).to_i +
        d + b - 1524
       if jd < sg
        jd -= b
@@ -406,14 +407,14 @@
       if jd < sg
        a = jd
       else
-       x = ((jd - 1867216.25) / 36524.25).floor
-       a = jd + 1 + x - (x / 4.0).floor
+       x = ((jd - (186721625 / 100)) / (3652425 / 100)).to_i
+       a = jd + 1 + x - (x / 4).to_i
       end
       b = a + 1524
-      c = ((b - 122.1) / 365.25).floor
-      d = (365.25 * c).floor
-      e = ((b - d) / 30.6001).floor
-      dom = b - d - (30.6001 * e).floor
+      c = ((b - (1221 / 10)) / (36525 / 100)).to_i
+      d = ((36525 / 100)* c).to_i
+      e = ((b - d) / (306001 / 10000)).to_i
+      dom = b - d - ((306001 / 10000) * e).to_i
       if e <= 13
        m = e - 1
        y = c - 4716

In This Thread