[#1562] Re: rbdj1227.lzh —
わたなべです.
[#1582] [BUG] Regexp — sinara@...
原です。あけましておめでとうございます。
まつもと ゆきひろです
原です。
まつもと ゆきひろです.
[#1583] jchop — WATANABE Hirofumi <watanabe@...>
わたなべです. おめでとう.
[#1614] [tk] Cannot execute some samples — Eiji-usagi-MATSUmoto <ematsu@...>
まつもと@ぴーえふゆーと申します。はじめまして。
[#1625] matz has back! — matz@... (Yukihiro Matsumoto)
まつもと ゆきひろです
[#1639] Script for making Index of Ruby Manual — s.suda@...
須田です。
[#1655] [Q] Use of '==', 'eql?' and 'hash' — sinara@...
原です。
[#1667] [Q] Use of Thread and Mutex — sinara@...
原です。
まつもと ゆきひろです.
原です。
原です。
[#1670] [Q] Timeout in Socket (Re: [Q] Use of Thread and Mutex) — sinara@...
原です。
まつもと ゆきひろです.
[#1677] ruby-1.0-970110 available — matz@... (Yukihiro Matsumoto)
まつもと ゆきひろです.
[#1682] 組み込みクラスのメソッド .htm — (Dezawa Shin-ichiro) <dezawa@...>
出沢です
[#1688] Ruby 1.0-970110 on NeXTSTEP — SHIROYAMA Takayuki <psi@...>
[#1705] 正規表現 単独の ? — Sinichiro Dezawa <dezawa@...>
出沢です
まつもと ゆきひろです
matz> rubyの使っているGNUの正規表現ルーチンのデフォルトではパター
わたなべです.
まつもと ゆきひろです.
[#1720] ruby 1.0-970116 available — matz@... (Yukihiro Matsumoto)
まつもと ゆきひろです.
[#1723] in-place edit on djgpp/win32 — matz@... (Yukihiro Matsumoto)
まつもと ゆきひろです.
[#1753] Usage of Menu — Noritugu Nakamura <nnakamur@...>
[#1762] ruby 1.0-970118 available — matz@... (Yukihiro Matsumoto)
まつもと ゆきひろです
[#1771] rectangle of canvas widget — Noritugu Nakamura <nnakamur@...>
原です。
まつもと ゆきひろです
原です。
まつもと ゆきひろです.
原です。
[#1788] Text of TkCanvas — Noritugu Nakamura <nnakamur@...>
まつもと ゆきひろです.
まつもと ゆきひろです.
まつもと ゆきひろです.
わたなべです.
[#1794] Filetest error on Ruby-DJ — s.suda@...
須田です。
[#1833] GD.c revised — matz@... (Yukihiro Matsumoto)
まつもと ゆきひろです
[#1865] ruby-1.0-960124 available — matz@... (Yukihiro Matsumoto)
まつもと ゆきひろです
わたなべです.
まつもと ゆきひろです.
わたなべです.
まつもと ゆきひろです.
まつもと@ぴーえふゆーです。
まつもと ゆきひろです.
まつもと@ぴーえふゆーです。
まつもと ゆきひろです.
まつもと@ぴーえふゆーです。
[#1871] None — (Dezawa Shin-ichiro) <dezawa@...>
でざわです
[#1875] toplevel of Tk — Noritugu Nakamura <nnakamur@...>
[#1899] [Dist] Mutex — keiju@... (Keiju ISHITSUKA)
けいじゅ@SHLジャパンです.
[#1926] [Dist] Mutex module — keiju@... (Keiju ISHITSUKA)
けいじゅ@SHLジャパンです.
まつもと ゆきひろです.
けいじゅ@SHLジャパンです.
まつもと ゆきひろです.
原です。
まつもと ゆきひろです.
けいじゅ@SHLジャパンです.
けいじゅ@SHLジャパンです.
まつもと ゆきひろです.
けいじゅ@SHLジャパンです.
まつもと ゆきひろです.
原です。
まつもと ゆきひろです.
けいじゅ@SHLジャパンです.
原です。
けいじゅ@SHLジャパンです.
まつもと ゆきひろです.
原です。
まつもと ゆきひろです.
原です。
まつもと ゆきひろです.
原です。
まつもと ゆきひろです.
原です。
まつもと ゆきひろです.
原です。
出沢です
まつもと ゆきひろです.
原です。
[#1953] open (file descriptor) — j_kuro@... (Jun Kuroda)
黒田です.
まつもと ゆきひろです.
黒田です.
原です。
まつもと ゆきひろです.
[ruby-list:1871] None
でざわです
bignum に sqrt 作ってみました。
で、テストしていて気づいたのですが bignum が 32bit を切ると
Fixnum に変わってしまうんですね。
c=200000000000000; c.sqrt は通るが (c/100000000000).sqrt は
undefined local variable or method `sqrt' for 2000(Fixnum)
はて、
すべての Numneric に作る必要がでてきた、、。
と言うことで、Fixnum と Float にも作りました。
Known BUG:
負の Fixnum を sqrt しても エラーにならない。
次の warning が出ます。
bignum.c:1260: warning: assignment makes pointer from integer without a cast
bignum.c:1263: warning: assignment makes pointer from integer without a cast
bignum な x を x>>1 するにはどうするのが正しい作法?
x = big_rshift(x, INT2FIX(1) );
--- bignum.c.orig Sat Jan 25 09:47:03 1997
+++ bignum.c Sat Jan 25 18:11:01 1997
@@ -1,3 +1,4 @@
+#include <stdio.h>
/************************************************
bignum.c -
@@ -1215,6 +1216,55 @@
return INT2FIX(big->len*2);
}
+static VALUE
+big_sqrt(x)
+ struct RBignum *x;
+{
+ struct RBignum *z;
+ USHORT *zds, *xds;
+ unsigned long y, a;
+ UINT len, sqrt_len, iz, ix , j ;
+ UINT mask;
+
+ /* 符号確認*/
+ if (x->sign == 0)ArgError("square root for negative number");
+
+ /* <= 2^32 */
+ /* あり得ない */
+ /* 正規化 2^30 <= < 2^32 にする*/
+ xds = BDIGITS(x);
+ iz = sqrt_len; ix = x->len;
+ y = ((long)xds[x->len-1])<<16 ;
+ j=16;
+ mask = ~0177777 ; /* 0011 1111 1111 1111 or 0111 1111 1111 1111 */
+ while ( y & mask ){
+ j -= 2; y >>=2; /* j bits 左shift した */
+ }
+ y = (y << 16) + (((long)xds[x->len-2])<<j)
+ + (( (xds[x->len-3])<<j & 0377 )>>16 );
+
+ /* 初期値 */
+ a = 143257 - 202860544/(1582+( y >>22));
+ a = a << ( 16 - (j>>1));
+ sqrt_len = (( x->len+1) >>1) ;
+ z = (struct RBignum*)bignew( sqrt_len, 1);
+ zds = BDIGITS(z);
+ zds[sqrt_len-1] = a>>16; zds[sqrt_len - 2 ] = a & 0177777;
+
+ /* 精度計算 */
+ iz = (x->len *16 - j)>>1 ;
+
+ /* Newton (until j * 2^i > iz ) */
+ /* X(i+1) = (X(i)^2 + Y)/2X(i) --> = X(i)>>1 + (Y>>1)/X(i) */
+ /* x = x>>1 */
+ x = big_rshift(x, INT2FIX(1) );
+ for(j=15; j < iz; j = j<<1){
+ /* z = ( z >> 1 ) + ( x >> 1 )/z */
+ z = big_plus(big_rshift(z, INT2FIX(1)), big_div( x,z) );
+ }
+ return bignorm(z);
+}
+
void
Init_Bignum()
{
@@ -1246,4 +1296,6 @@
rb_define_method(cBignum, "to_f", big_to_f, 0);
rb_define_method(cBignum, "abs", big_abs, 0);
rb_define_method(cBignum, "size", big_size, 0);
+ rb_define_method(cBignum, "sqrt", big_sqrt, 0);
+
}
*** numeric.c.orig Sat Jan 25 09:44:25 1997
--- numeric.c Sat Jan 25 18:41:49 1997
***************
*** 1040,1045 ****
--- 1040,1065 ----
}
return num;
}
+ static VALUE
+ flo_sqrt(flt)
+ struct RFloat *flt;
+ {
+ double val = flt->value;
+ if (val < 0.0) ArgError("square root for negative number");
+ return float_new(sqrt(val));
+ }
+ static VALUE
+ fix_sqrt(fix)
+ VALUE fix;
+ {
+ double dbl;
+ fix = FIX2INT(fix) ;
+ if ( fix < 0 ) ArgError("square root for negative number");
+ dbl = fix;
+ fix = sqrt(dbl)+0.5 ;
+ fix =INT2FIX(fix) ;
+ return fix ;
+ }
extern VALUE mComparable;
extern VALUE eException;
***************
*** 1138,1141 ****
--- 1158,1163 ----
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, "sqrt", flo_sqrt, 0);
+ rb_define_method(cFixnum, "sqrt", fix_sqrt, 0);
}