[#1553] [BUG] String.dup — keiju@... (Keiju ISHITSUKA)

けいじゅ@日本ラショナルソフトウェアです.

51 messages 1998/03/03
[#1554] Re: [BUG] String.dup — matz@... (Yukihiro Matsumoto) 1998/03/03

まつもと ゆきひろです

[#1564] Re: [BUG] String.dup — keiju@... (石塚圭樹 ) 1998/03/03

けいじゅ@日本ラショナルソフトウェアです.

[#1565] Re: [BUG] String.dup — matz@... (Yukihiro Matsumoto) 1998/03/03

まつもと ゆきひろです

[#1572] Re: [BUG] String.dup — keiju@... (石塚圭樹 ) 1998/03/03

けいじゅ@日本ラショナルソフトウェアです.

[#1578] Re: [BUG] String.dup — matz@... (Yukihiro Matsumoto) 1998/03/04

まつもと ゆきひろです

[#1580] Re: [BUG] String.dup — shugo@... (Shugo Maeda) 1998/03/04

前田です。

[#1584] Re: [BUG] String.dup — matz@... (Yukihiro Matsumoto) 1998/03/04

まつもと ゆきひろです

[#1591] Re: [BUG] String.dup — keiju@... (石塚圭樹 ) 1998/03/04

けいじゅ@日本ラショナルソフトウェアです.

[#1593] Re: [BUG] String.dup — matz@... (Yukihiro Matsumoto) 1998/03/05

まつもと ゆきひろです

[#1605] Re: [BUG] String.dup — keiju@... (石塚圭樹 ) 1998/03/07

けいじゅ@日本ラショナルソフトウェアです.

[#1606] Re: [BUG] String.dup — shugo@... (Shugo Maeda) 1998/03/07

前田です。

[#1609] Re: [BUG] String.dup — keiju@... (石塚圭樹 ) 1998/03/08

けいじゅ@日本ラショナルソフトウェアです.

[#1625] Re: [BUG] String.dup — shugo@... (Shugo Maeda) 1998/03/09

前田です。

[#1628] Re: [BUG] String.dup — keiju@... (石塚圭樹 ) 1998/03/09

けいじゅ@日本ラショナルソフトウェアです.

[#1637] Re: [BUG] String.dup — shugo@... (Shugo Maeda) 1998/03/10

前田です。

[#1641] implementation of super_undef (Re: [BUG] String.dup) — matz@... (Yukihiro Matsumoto) 1998/03/10

まつもと ゆきひろです

[#1647] Re: implementation of super_undef (Re: [BUG] String.dup) — shugo@... (Shugo Maeda) 1998/03/10

前田です。

[#1648] Re: implementation of super_undef (Re: [BUG] String.dup) — matz@... (Yukihiro Matsumoto) 1998/03/10

まつもと ゆきひろです

[#1654] Re: implementation of super_undef (Re: [BUG] String.dup) — keiju@... (石塚圭樹 ) 1998/03/10

けいじゅ@日本ラショナルソフトウェアです.

[#1656] Re: implementation of super_undef (Re: [BUG] String.dup) — matz@... (Yukihiro Matsumoto) 1998/03/10

まつもと ゆきひろです

[#1557] IO#putc/Kernel#putc/Kernel#putchar — shugo@... (Shugo Maeda)

前田です。

28 messages 1998/03/03
[#1558] Re: IO#putc/Kernel#putc/Kernel#putchar — matz@... (Yukihiro Matsumoto) 1998/03/03

まつもと ゆきひろです

[#1569] Re: IO#putc/Kernel#putc/Kernel#putchar — shugo@... (Shugo Maeda) 1998/03/03

前田です。

[#1577] Re: IO#putc/Kernel#putc/Kernel#putchar — matz@... (Yukihiro Matsumoto) 1998/03/04

まつもと ゆきひろです

[#1579] Re: IO#putc/Kernel#putc/Kernel#putchar — shugo@... (Shugo Maeda) 1998/03/04

前田です。

[#1581] Re: IO#putc/Kernel#putc/Kernel#putchar — matz@... (Yukihiro Matsumoto) 1998/03/04

まつもと ゆきひろです

[#1582] Re: IO#putc/Kernel#putc/Kernel#putchar — shugo@... (Shugo Maeda) 1998/03/04

前田です。

[#1583] Re: IO#putc/Kernel#putc/Kernel#putchar — matz@... (Yukihiro Matsumoto) 1998/03/04

まつもと ゆきひろです

[#1587] Re: IO#putc/Kernel#putc/Kernel#putchar — shugo@... (Shugo Maeda) 1998/03/04

前田です。

[#1592] Re: IO#putc/Kernel#putc/Kernel#putchar — keiju@... (石塚圭樹 ) 1998/03/05

けいじゅ@日本ラショナルソフトウェアです.

[#1657] Re: [ruby-list:7057] Re: infinity — shugo@... (Shugo Maeda)

前田です。

99 messages 1998/03/10
[#1659] Re: [ruby-list:7057] Re: infinity — keiju@... (石塚圭樹 ) 1998/03/10

けいじゅ@日本ラショナルソフトウェアです.

[#1662] Re: [ruby-list:7057] Re: infinity — matz@... (Yukihiro Matsumoto) 1998/03/11

まつもと ゆきひろです

[#1680] Re: [ruby-list:7057] Re: infinity — keiju@... (石塚圭樹 ) 1998/03/11

けいじゅ@日本ラショナルソフトウェアです.

[#1690] Re: [ruby-list:7057] Re: infinity — Tadayoshi Funaba <tadf@...> 1998/03/11

ふなばです。

[#1692] Re: [ruby-list:7057] Re: infinity — shugo@... (Shugo Maeda) 1998/03/11

前田です。

[#1696] Re: [ruby-list:7057] Re: infinity — Tadayoshi Funaba <tadf@...> 1998/03/11

ふなばです。

[#1698] Re: [ruby-list:7057] Re: infinity — Tadayoshi Funaba <tadf@...> 1998/03/11

ふなばです。

[#1706] argument check in Range::new — shugo@... (Shugo Maeda) 1998/03/11

前田です。

[#1715] Re: argument check in Range::new — matz@... (Yukihiro Matsumoto) 1998/03/12

まつもと ゆきひろです

[#1661] Re: infinity — shugo@... (Shugo Maeda) 1998/03/10

前田です。

[#1665] Re: infinity — Kazuhisa YANAGAWA <katze@...> 1998/03/11

In message <199803101536.PAA01595@soleil.localnet.or.jp>

[#1670] Re: infinity — shugo@... (Shugo Maeda) 1998/03/11

前田です。

[#1699] Re: infinity — keiju@... (石塚圭樹 ) 1998/03/11

けいじゅ@日本ラショナルソフトウェアです.

[#1705] Re: infinity — shugo@... (Shugo Maeda) 1998/03/11

前田です。

[#1714] Re: infinity — keiju@... (石塚圭樹 ) 1998/03/12

けいじゅ@日本ラショナルソフトウェアです.

[#1739] Re: infinity — shugo@... (Shugo Maeda) 1998/03/12

前田です。

[#1750] Re: infinity — keiju@... (石塚圭樹 ) 1998/03/12

けいじゅ@日本ラショナルソフトウェアです.

[#1765] Re: infinity — shugo@... (Shugo Maeda) 1998/03/13

前田です。

[#1766] Re: infinity — keiju@... (石塚圭樹 ) 1998/03/13

けいじゅ@日本ラショナルソフトウェアです.

[#1770] Re: infinity — shugo@... (Shugo Maeda) 1998/03/13

前田です。

[#1774] Re: infinity — keiju@... (石塚圭樹 ) 1998/03/13

けいじゅ@日本ラショナルソフトウェアです.

[#1775] Re: infinity — shugo@... (Shugo Maeda) 1998/03/13

前田です。

[#1777] Re: infinity — keiju@... (石塚圭樹 ) 1998/03/13

けいじゅ@日本ラショナルソフトウェアです.

[#1780] Re: infinity — shugo@... (Shugo Maeda) 1998/03/13

前田です。

[#1781] Re: infinity — keiju@... (石塚圭樹 ) 1998/03/13

けいじゅ@日本ラショナルソフトウェアです.

[#1789] Re: infinity — shugo@... (Shugo Maeda) 1998/03/15

前田です。

[#1792] Re: infinity — keiju@... (石塚圭樹 ) 1998/03/15

けいじゅ@日本ラショナルソフトウェアです.

[#1783] [Req] Comparable#min/max — keiju@... (Keiju ISHITSUKA)

けいじゅ@日本ラショナルソフトウェアです.

25 messages 1998/03/14
[#1794] Re: [Req] Comparable#min/max — matz@... (Yukihiro Matsumoto) 1998/03/16

まつもと ゆきひろです

[#1798] Re: [Req] Comparable#min/max — keiju@... (石塚圭樹 ) 1998/03/16

けいじゅ@日本ラショナルソフトウェアです.

[#1801] Re: [Req] Comparable#min/max — matz@... (Yukihiro Matsumoto) 1998/03/16

まつもと ゆきひろです

[#1806] Re: [Req] Comparable#min/max — keiju@... (石塚圭樹 ) 1998/03/16

けいじゅ@日本ラショナルソフトウェアです.

[#1808] Re: [Req] Comparable#min/max — matz@... (Yukihiro Matsumoto) 1998/03/16

まつもと ゆきひろです

[#1809] Re: [Req] Comparable#min/max — keiju@... (石塚圭樹 ) 1998/03/16

けいじゅ@日本ラショナルソフトウェアです.

[#1814] Re: [Req] Comparable#min/max — matz@... (Yukihiro Matsumoto) 1998/03/17

まつもと ゆきひろです

[#1791] Re: trap and throw problem — keiju@... (Keiju ISHITSUKA)

けいじゅ@日本ラショナルソフトウェアです.

24 messages 1998/03/15
[#1796] Re: trap and throw problem — matz@... (Yukihiro Matsumoto) 1998/03/16

まつもと ゆきひろです

[#1799] Re: trap and throw problem — keiju@... (石塚圭樹 ) 1998/03/16

けいじゅ@日本ラショナルソフトウェアです.

[#1800] Re: trap and throw problem — matz@... (Yukihiro Matsumoto) 1998/03/16

まつもと ゆきひろです

[#1807] Re: trap and throw problem — keiju@... (石塚圭樹 ) 1998/03/16

けいじゅ@日本ラショナルソフトウェアです.

[#1823] Re: trap and throw problem — matz@... (Yukihiro Matsumoto) 1998/03/17

まつもと ゆきひろです

[#1839] Re: trap and throw problem — keiju@... (石塚圭樹 ) 1998/03/17

けいじゅ@日本ラショナルソフトウェアです.

[#1840] Re: trap and throw problem — matz@... (Yukihiro Matsumoto) 1998/03/17

まつもと ゆきひろです

[#1859] experimantal release 1.1b9_04 — matz@... (Yukihiro Matsumoto)

まつもと ゆきひろです

30 messages 1998/03/19
[#1912] Re: experimantal release 1.1b9_04 — Tadayoshi Funaba <tadf@...> 1998/03/24

ふなばです。

[#1908] RUBYLIB and default path problem — keiju@... (Keiju ISHITSUKA)

けいじゅ@日本ラショナルソフトウェアです.

19 messages 1998/03/24
[#1909] Re: RUBYLIB and default path problem — matz@... (Yukihiro Matsumoto) 1998/03/24

まつもと ゆきひろです

[#1916] Re: RUBYLIB and default path problem — keiju@... (石塚圭樹 ) 1998/03/25

けいじゅ@日本ラショナルソフトウェアです.

[#1919] Re: RUBYLIB and default path problem — matz@... (Yukihiro Matsumoto) 1998/03/25

まつもと ゆきひろです

[#1922] Re: RUBYLIB and default path problem — keiju@... (石塚圭樹 ) 1998/03/25

けいじゅ@日本ラショナルソフトウェアです.

[#1923] Re: RUBYLIB and default path problem — matz@... (Yukihiro Matsumoto) 1998/03/25

まつもと ゆきひろです

[#2002] [Req] Binding.new — keiju@... (Keiju ISHITSUKA)

けいじゅ@日本ラショナルソフトウェアです.

29 messages 1998/03/31
[#2003] Re: [Req] Binding.new — matz@... (Yukihiro Matsumoto) 1998/03/31

まつもと ゆきひろです

[#2004] Re: [Req] Binding.new — keiju@... (石塚圭樹 ) 1998/03/31

けいじゅ@日本ラショナルソフトウェアです.

[#2008] Re: [Req] Binding.new — matz@... (Yukihiro Matsumoto) 1998/04/02

まつもと ゆきひろです

[#2010] Re: [Req] Binding.new — keiju@... (石塚圭樹 ) 1998/04/02

けいじゅ@日本ラショナルソフトウェアです.

[#2012] Re: [Req] Binding.new — matz@... (Yukihiro Matsumoto) 1998/04/02

まつもと ゆきひろです

[#2013] Re: [Req] Binding.new — keiju@... (石塚圭樹 ) 1998/04/02

けいじゅ@日本ラショナルソフトウェアです.

[#2014] Re: [Req] Binding.new — matz@... (Yukihiro Matsumoto) 1998/04/02

まつもと ゆきひろです

[#2015] Re: [Req] Binding.new — keiju@... (石塚圭樹 ) 1998/04/02

けいじゅ@日本ラショナルソフトウェアです.

[#2016] Re: [Req] Binding.new — matz@... (Yukihiro Matsumoto) 1998/04/02

まつもと ゆきひろです

[#2017] Re: [Req] Binding.new — matz@... (Yukihiro Matsumoto) 1998/04/02

まつもと ゆきひろです

[#2020] Re: [Req] Binding.new — keiju@... (石塚圭樹 ) 1998/04/02

けいじゅ@日本ラショナルソフトウェアです.

[#2021] Re: [Req] Binding.new — matz@... (Yukihiro Matsumoto) 1998/04/02

まつもと ゆきひろです

[#2038] Re: [Req] Binding.new — keiju@... (石塚圭樹 ) 1998/04/03

けいじゅ@日本ラショナルソフトウェアです.

[#2039] Re: [Req] Binding.new — matz@... (Yukihiro Matsumoto) 1998/04/03

まつもと ゆきひろです

[ruby-dev:1661] Re: infinity

From: shugo@... (Shugo Maeda)
Date: 1998-03-10 16:10:56 UTC
List: ruby-dev #1661
前田です。

In message "[ruby-dev:1659] Re: [ruby-list:7057] Re: infinity"
石塚圭樹 <keiju@rational.com> wrote:

|最近, ruby-listでもレベルの高い話しが多くてついていけない(^^;;;

ですね、気づいたらなるべく早目にruby-devに移るようにしましょう(^^;

|もう一度整理すると
|
|1. 数学的な無限大を扱いたい
|2. FloatのInf/Nanはどうするか?
|3. rubyの標準の動作である例外との擦り合わせはどうするか?
(snip)
|ただし, Inf/Nanがあるとそれなりに結果が出るので, そういうことでも良い
|と思う人のために, 例外を出さないモードを用意するというのはどうでしょう
|か? 

デフォルトでFloat.raise_infnan_error == trueということですね。
そうなるように書き直してみましたので、パッチを付けておきます。
# 1.1b9へのパッチです。

|最後に数学的な無限大ですが, Inf/Nanとは別にNumericかRealの下にクラスを
|導入して定数として実装するというのはどうでしょう?

それで、require 'mathn'すると1 / 0でその無限大定数を返すと良さそうですね。
# あれ、現状だと、
# rbc0> 1 / 0
# <Rational: @numerator=1, @denominator=0>
# となってしまいますね(^^;

-- 
前田 修吾

diff -u numeric.c.orig numeric.c
--- numeric.c.orig	Tue Mar 10 00:49:47 1998
+++ numeric.c	Wed Mar 11 00:20:15 1998
@@ -23,6 +23,9 @@
 
 VALUE eZeroDiv;
 
+static VALUE eInfNaN;
+static int raise_infnan_error = 1;
+
 ID rb_frame_last_func();
 VALUE float_new();
 double big2dbl();
@@ -150,11 +153,31 @@
     return num;
 }
 
+static VALUE
+float_s_get_raise_infnan_error(recv)
+    VALUE recv;
+{
+    return raise_infnan_error?TRUE:FALSE;
+}
+
+static VALUE
+float_s_set_raise_infnan_error(recv, val)
+    VALUE recv, val;
+{
+    raise_infnan_error = RTEST(val);
+    return val;
+}
+
 VALUE
 float_new(d)
     double d;
 {
-    NEWOBJ(flt, struct RFloat);
+    struct RFloat *flt;
+
+    if (raise_infnan_error && (isinf(d) || isnan(d)))
+	Raise(eInfNaN, "%f", d);
+
+    flt = (struct RFloat*)rb_newobj();
     OBJSETUP(flt, cFloat, T_FLOAT);
 
     flt->value = d;
@@ -168,7 +191,7 @@
     char buf[32];
 
     sprintf(buf, "%g", RFLOAT(flt)->value);
-    if (strchr(buf, '.') == 0) {
+    if (finite(RFLOAT(flt)->value) && strchr(buf, '.') == 0) {
 	int len = strlen(buf);
 	char *ind = strchr(buf, 'e');
 
@@ -254,20 +277,12 @@
 flo_div(x, y)
     VALUE x, y;
 {
-    INT f_y;
-    double d;
-
     switch (TYPE(y)) {
       case T_FIXNUM:
-	f_y = FIX2INT(y);
-	if (f_y == 0) num_zerodiv();
-	return float_new(RFLOAT(x)->value / (double)f_y);
+	return float_new(RFLOAT(x)->value / (double)FIX2INT(y));
       case T_BIGNUM:
-	d = big2dbl(y);
-	if (d == 0.0) num_zerodiv();
-	return float_new(RFLOAT(x)->value / d);
+	return float_new(RFLOAT(x)->value / big2dbl(y));
       case T_FLOAT:
-	if (RFLOAT(y)->value == 0.0) num_zerodiv();
 	return float_new(RFLOAT(x)->value / RFLOAT(y)->value);
       default:
 	return num_coerce_bin(x, y);
@@ -443,6 +458,37 @@
 }
 
 static VALUE
+flo_is_inf(flt)
+    VALUE flt;
+{
+    int ret = isinf(RFLOAT(flt)->value);
+    if (ret)
+	return INT2FIX(ret);
+    else
+	return FALSE;
+}
+
+static VALUE
+flo_is_nan(flt)
+    VALUE flt;
+{
+    if (isnan(RFLOAT(flt)->value))
+	return TRUE;
+    else
+	return FALSE;
+}
+
+static VALUE
+flo_is_finite(flt)
+    VALUE flt;
+{
+    if (finite(RFLOAT(flt)->value))
+	return TRUE;
+    else
+	return FALSE;
+}
+
+static VALUE
 to_integer(val)
     VALUE val;
 {
@@ -1072,6 +1118,8 @@
 void
 Init_Numeric()
 {
+    VALUE Inf, NaN;
+
     coerce = rb_intern("coerce");
     to_i = rb_intern("to_i");
 
@@ -1144,8 +1192,19 @@
     rb_define_method(cFixnum, "step", fix_step, 2);
     rb_define_method(cFixnum, "times", fix_dotimes, 0);
 
+    eInfNaN = rb_define_class("InfNaNError", eException);
     cFloat  = rb_define_class("Float", cNumeric);
 
+    Inf = float_new(0.0); RFLOAT(Inf)->value = 1.0 / 0.0;
+    rb_define_const(cFloat, "Inf", Inf);
+    NaN = float_new(0.0); RFLOAT(NaN)->value = 0.0 / 0.0;
+    rb_define_const(cFloat, "NaN", NaN);
+
+    rb_define_singleton_method(cFloat, "raise_infnan_error",
+			       float_s_get_raise_infnan_error, 0);
+    rb_define_singleton_method(cFloat, "raise_infnan_error=",
+			       float_s_set_raise_infnan_error, 1);
+
     rb_undef_method(CLASS_OF(cFloat), "new");
 
     rb_define_method(cFloat, "to_s", flo_to_s, 0);
@@ -1164,4 +1223,7 @@
     rb_define_method(cFloat, "to_i", flo_to_i, 0);
     rb_define_method(cFloat, "to_f", flo_to_f, 0);
     rb_define_method(cFloat, "abs", flo_abs, 0);
+    rb_define_method(cFloat, "inf?", flo_is_inf, 0);
+    rb_define_method(cFloat, "nan?", flo_is_nan, 0);
+    rb_define_method(cFloat, "finite?", flo_is_finite, 0);
 }

In This Thread