[#11357] [PATCH] an analogue of `long long' — "Nobuyoshi.Nakada" <nobu.nakada@...>
なかだです。
まつもと ゆきひろです
えぐち@エスアンドイー です。
まつもと ゆきひろです
えぐち@エスアンドイー です。
まつもと ゆきひろです
>From: matz@zetabits.com (Yukihiro Matsumoto)
まつもと ゆきひろです
[#11440] class Character (was: Ruby I18N) — Yasushi Shoji <yashi@...>
[ruby-dev:11428] からの続きですが、threadは切りました。
高橋征義です。用語について。
At Wed, 8 Nov 2000 20:44:55 +0900,
高橋征義です。
At Thu, 9 Nov 2000 13:30:34 +0900,
まつもと ゆきひろです
[#11447] gets は secure? — Kazuhiro NISHIYAMA <zn@...>
出力がInsecureなのに入力はsecureなのでしょうか?
[#11467] debug write in regex.c? — "Nobuyoshi.Nakada" <nobu.nakada@...>
なかだです。
[#11500] rb_to_integer/rb_to_int — "Nobuyoshi.Nakada" <nobu.nakada@...>
なかだです。
[#11520] A problem of Socket methods on Windows — OKA Toshiyuki <oka@...>
岡と申します。
なかだです。
まつもと ゆきひろです
なかだです。
岡です。
なかだです。
なかだです。
岡です。
なかだです。
[#11569] blocking on socket? — Shugo Maeda <shugo@...>
前田です。
[#11591] object.c パッチ — Kazuhiro NISHIYAMA <zn@...>
使われてなかったnil_plusの削除とOBJ_INFECTへの変更です。
[#11611] return value of waitpid2 — Koji Arai <JCA02266@...>
新井です。
まつもと ゆきひろです
荒井です。いや、新井です。(よくあることさ)
まつもと ゆきひろです
新井です。
新井です。
[#11618] Re: class variable — "Koji Arai" <jca02266@...>
新井です
なかだです。
まつもと ゆきひろです
> まつもと ゆきひろです
まつもと ゆきひろです
まつもと ゆきひろです
新井です。
[#11641] eval too slow — Wakou Aoyama <wakou@...>
青山です。
[#11650] conflict of NODE_DREGX_ONCE — "Nobuyoshi.Nakada" <nobu.nakada@...>
なかだです。
まつもと ゆきひろです
[#11662] IO (Re: fork problem?) — Tanaka Akira <akr@...17n.org>
In article <E140cR3-0002ls-00@ev.netlab.zetabits.co.jp>,
まつもと ゆきひろです
In article <E140fxW-0002u9-00@ev.netlab.zetabits.co.jp>,
In article <hvor93w5wb8.fsf@coulee.m17n.org>,
In article <hvoofz05uwz.fsf@coulee.m17n.org>,
まつもと ゆきひろです
新井です。
まつもと ゆきひろです
In article <E141eaC-0003w0-00@ev.netlab.zetabits.co.jp>,
まつもと ゆきひろです
In article <E142ZqF-0004rX-00@ev.netlab.zetabits.co.jp>,
まつもと ゆきひろです
In article <E143Zem-000271-00@ev.netlab.zetabits.co.jp>,
まつもと ゆきひろです
In article <E143amj-00028V-00@ev.netlab.zetabits.co.jp>,
[ruby-dev:11363] Re: bignum
田中です
>From: matz@zetabits.com (Yukihiro Matsumoto)
>Subject: [ruby-dev:11360] Re: bignum
> Knuthの本ではなんだか再帰を使ってるようなんですが、なんといっ
> ても例題がMIX(要するにアセンブラ)で書いてあるんで、良く分か
> んなかったのでした。新版を英語で読んだ方が良いのかも。って新
> 版でもMIXなのかしら。
GMPを参考にしてCで書いたものをご参考までに添付します。
add() とかを作らないと動かないので、動作確認はしていません。
alloca を使うかどうかは要検討。GMPでは workspace を
最初に割り当てて、未使用領域を下請けに渡しているようです。
> ところでKaratsubaってなんとなく日本的な響きですがロシア(当時
> はソ連か)の人みたいですね。論文は1962年に出てます。
私もてっきり日本人かと思いました。
田中昌宏
#define cpy(a,b,n) memcpy(a,b,sizeof(BDIGIT)*(n))
#define alloc(n) (BDIGIT*)alloca(sizeof(BDIGIT)*(n))
#define THRESH 8 /* or so */
int gt(BDIGIT *x, int nx, BDIGIT *y, int ny); /* x > y */
int add(BDIGIT *x, int nx, BDIGIT *y, int ny); /* x += y */
int sub(BDIGIT *x, int nx, BDIGIT *y, int ny); /* x -= y */
/* r[nx+ny] = x[nx] * y[ny] */
void mul_base(BDIGIT *r, BDIGIT *x, int nx, BDIGIT *y, int ny);
/* r[2*nm] = x[nm] * y[nm] */
void mul(BDIGIT *r, BDIGIT *x, BDIGIT *y, int nm)
{
BDIGIT *u, *v, *w, *z;
int n, m, n2, flag;
if (m<THRESH)
mul_base(r,x,nm,y,nm);
/* nm == n + m, n==m or n==m+1 */
m = nm/2;
n = nm-m;
n2 = n*2;
/*
x1 = x[0..n-1], x2 = x[n..nm-1]
y1 = y[0..n-1], y2 = y[n..nm-1]
u = r[0..n2-1], v = r[n2..2nm-1]
*/
u = r;
v = r+n2;
if ( gt( x,n, x+n,m ) ) { /* x1 > x2 */
cpy(u, x, n);
sub(u, n, x+n, m); /* x1-x2 */
flag = 0;
} else {
cpy(u, x+n, m); u[m]=0;
sub(u, m, x, n); /* x2-x1 */
flag = 1;
}
if ( gt( y,n, y+n,m ) ) { /* y1 > y2 */
cpy(v, y, n);
sub(v, n, y+n, m); /* y1-y2 */
} else {
cpy(v, y+n, m); v[m]=0;
sub(v, m, y, n); /* y2-y1 */
flag ^= 1;
}
w = alloc(n2);
mul(w, u, v, n); /* w = +/- (x1-x2)*(y1-y2) */
mul(u, x, y, n); /* u = r[0..n2-1] = x1*y1 */
mul(v, x+n, y+n, m); /* v = r[n2..2nm-1] = x2*y2 */
z = alloc(n2+1);
cpy(z, u, n2); z[n2]=0;
add(z, n2+1, v, n2); /* z = u+v */
if (flag)
add(z, n2+1, w, n2); /* z = u+v+w */
else
sub(z, n2+1, w, n2); /* z = u+v-w */
add(r+n, n+2*m, z, n2+1); /* r[n..2nm-1] += u+v-w */
}