[#1219] ruby animal — OZAWA Sakuro <crouton@...>

小澤さく@塩尻Internetです.

18 messages 1996/12/09

[#1256] ruby 0.99.4-961212 available — matz@... (Yukihiro Matsumoto)

まつもと ゆきひろです.

21 messages 1996/12/12
[#1257] Re: ruby 0.99.4-961212 available — Yasuo OHBA <jammy@...> 1996/12/12

大庭@SHLJapanです.

[#1258] Re: ruby 0.99.4-961212 available — matz@... (Yukihiro Matsumoto) 1996/12/12

まつもと ゆきひろです.

[#1259] Re: ruby 0.99.4-961212 available — WATANABE Hirofumi <watanabe@...> 1996/12/12

わたなべです.

[#1261] Re: ruby 0.99.4-961212 available — matz@... (Yukihiro Matsumoto) 1996/12/12

まつもと ゆきひろです.

[#1290] ruby 0.99.4-961217 will be available — matz@... (Yukihiro Matsumoto)

まつもと ゆきひろです.

32 messages 1996/12/17
[#1300] Re: ruby 0.99.4-961217 will be available — sinara@... 1996/12/17

原です。

[#1305] Re: ruby 0.99.4-961217 will be available — matz@... (Yukihiro Matsumoto) 1996/12/17

まつもと ゆきひろです.

[#1308] Re: ruby 0.99.4-961217 will be available — gougi@... (Shigeru Gougi) 1996/12/17

ごうぎ@TCIです。

[#1341] Re: ruby 0.99.4-961217 will be available — matz@... (Yukihiro Matsumoto) 1996/12/18

まつもと ゆきひろです.

[#1342] Re: ruby 0.99.4-961217 will be available — sinara@... 1996/12/18

原です。

[#1345] [BUG?] access string out of range — sinara@... 1996/12/18

原です。

[#1330] Re: Rational and Complex — Shin-ichiro Hara <sinara@...>

原です。

30 messages 1996/12/17
[#1335] Re: Rational and Complex — sinara@... 1996/12/18

原です。

[#1359] Re: Rational and Complex 1996/12/18

けいじゅ@SHLジャパンです.

[#1423] 配列への grep — (Dezawa Shin-ichiro) <dezawa@...>

出沢です

14 messages 1996/12/23

[#1469] wish ... — Noritugu Nakamura <nnakamur@...>

25 messages 1996/12/24
[#1470] Re: wish ... — matz@... (Yukihiro Matsumoto) 1996/12/24

まつもと ゆきひろです.

[ruby-list:1325] Re: Rational and Complex

From: Sinichiro Dezawa <dezawa@...>
Date: 1996-12-17 09:33:20 UTC
List: ruby-list #1325
> >いえ、結局私は assembler もできないので、Cで書いてました。(^^;
> >お題は「x < 2^32 の整数 x の sqrt を求めよ」というもので、

私はassembler会議入ってなかったのでこのゲームは知りませんでしたが
かって MS-DOS2.1 の上の N88-Basic V1.0 の機械語サブルーチンの中で
sqrt を計算する必要が出て、やはりループ無しで作った事があります。
初期値の精度を上げるのも大変だったので4回黙ってやった。

> >    a = 143257 - 202860544/(1582+(x>>22));
> 
>      ^ この数なんだろう??

Newton方で開平すると、一回毎に精度が倍になるのです。
ですから 
> >    a = (a + x/a)/2;
> >    b = (a + x/a)/2;

の2回で片付けるために、2^30 <= x < 2^32 の範囲の全てに
対して最悪 目的精度の 1/4 の有効桁精度を保証する近似値を
用意したのでしょうね。
  ( 1 〜 2^2 ) * 2^30 
の近似値だから、 sqrt( 1 〜 2^2 ) * 2^15 って事で。

> すね. これって, Bignumにも適応できますかね?? つまり, 数の範囲の制限を
> なくせます??

上で述べた私の経験では 近似値の初期値として重要なのは 桁数 なのです。
sqrt(x) の初期値を x そのもので始めても答えはでるのですが、
初期値として桁が合っていないから有効桁数が一桁もない(ことが普通)
ので、何回近似を行うかが設計できないから、結局 誤差 を見ながら
終了判定 という事になります。
初期値の桁が合ってると計算できる。

私がやった時は 初代ナノピコ教室じゃないから判り安くして

 X * 2^2n  と  X * 2^(2n+1)  にわけ、( 1<= X < 2 )

前者( X*2^2n)    のとき  (1 + x/2) * 2^n  を 		X=1+x
後者( X*2(2n+1)) のとき  (1.5 + x/2) * 2^n  を

初期値にしてました。
	アセンブラですから 2^2n 2^(2n+1) の切り分けは 7bit目を見りゃいいし、
	2^2n から 2^n へは指数部を符号付で右シフト
	 (1 + x/2) ってのは 仮数部を 1bit 右シフトですむ
		(1 の部分はメモリ上にないから)
	(1.5 + x/2) は 仮数部を右シフトして 1bit たてる。
これで精度は最悪 2進でほぼ2桁。4回やると 32bit 精度になる
で、仮数部 24bit だから十分。

(1.5 + x/2)、 (1 + x/2) に当たる部分をもっと精度良くするのが
assembler会議での競争だったのでしょう。
あの 初期値の出し方はよーわからん。
	おせーて > shin 

Bignum って整数ですか? 無限精度の実数?
Bignum のその時の桁数に応じた初期値の有効桁数の最悪値が
決定できるのならループの終了は誤差でなく、回数でできますね。
最悪値 と 最良値 の幅が大きいと無駄なループも出るけど

a = 143257 - 202860544/(1582+(x>>22)); そのままは 桁数が
ある範囲って事だから使えませんね。
# 桁に付いての合わせ込は簡単そうだな。
# ん? 2^22 未満だとどうするのかな。

In This Thread