From: keiju@... (ÀÐÄͷ½¼ù ) Date: 1996-12-17T17:07:18+09:00 Subject: [ruby-list:1319] Re: Rational and Complex けいじゅ@SHLジャパンです. In [ruby-list :01313 ] the message: "[ruby-list:1313] Re: Rational and Complex ", on Dec/17 16:31(JST) Shin-ichiro Hara writes: >はー、そうなんですか。そういえば Smalltalk は全然知らない。(^^; いまさらいいでしょう(^^;;; >それでも誤差の評価はできるので、何桁一致するためには何回やればいいか >決められますよね。 です. ただの好みです. >いえ、結局私は assembler もできないので、Cで書いてました。(^^; >お題は「x < 2^32 の整数 x の sqrt を求めよ」というもので、 >私の結論としては > >/* 2^30 <= x < 2^32 について root を計算する */ >unsigned long isqrt(unsigned long x) >{ > unsigned long a, b; > a = 143257 - 202860544/(1582+(x>>22)); ^ この数なんだろう?? > a = (a + x/a)/2; > b = (a + x/a)/2; > return a > b ? b : a; >} >です(証明あり)。ここで2回ニュートン近似を使ってますが、これを >1回にできるかどうかとか議論してました。実はできるのですが、、(^^; うーん. アルゴリズムが良く分かりませんがこっちの方が良さそうな気もしま すね. これって, Bignumにも適応できますかね?? つまり, 数の範囲の制限を なくせます?? あと, 任意の数になると繰り返しが発生することになると思いますが, その回 数は見積もれるのでしょうか?? 開平法ですと処理時間オーダは, O(log n) となるので, それより良くなるの であればニュートン法を利用した方がよいですね. __ ..........................................石塚 圭樹@SHLジャパン(株)... ------------->アドレス変わりました!! e-mail: keiju@shljapan.co.jp <----