subroutine keisan(m)
integer a,a0,n,i,m
real t,X,Y,Z
t=sqrt(real(m))
a0=int(t)
write(*,*) 'a0=',a0
a=a0
X=1
Y=0
Z=1
do 10 n=1,20
if (Z==0.0) exit
X=X*Z
Y=Z*(-Y+real(a)*Z)
Z=X*X*real(m)-(real(a)*Z-Y)**2
do 100 i=1,X
if(real(i)==X) then
X=X
else
if(((mod(int(X),i))==0).AND.((mod(int(Y),i))==0).AND.((mod(int(Z),i))==0)) then
X=X/real(i)
Y=Y/real(i)
Z=Z/real(i)
else
X=X
endif
endif
100 continue
a=int((X*t+Y)/Z)
write(*,*) 'a',n,'=',a
10 continue
end subroutine
サブルーチンのみ載せてますけど・・・・どうなのでしょう??

このQ&Aに関連する最新のQ&A

平方根」に関するQ&A: 平方根

A 回答 (1件)

なんで、こんな難しくなるの?



一番単純な形だと、

        1
√m = a1 + ──
        X

で、a1 は、√mの整数部。で、この X は、√m-a1 の逆数で、
それを又、この形にしてゆく、の繰返しでしょ。

   subroutine keisan(m)

   integer i,m,a;
   double x;
  
   x = sqrt(real(m))
   a = int(x);
  
   write(*,*) 'a=',a
  
   do 10 i = 1, 20
    if (x .eq. a) return;
    x = 1.0 / (x - a)
    a = int(x)
    write(*,*) 'a=',a
 10 continue

   return
   end

# fortran は、ずいぶん久しぶりなので、文法間違いがあったらごめんなさい

この回答への補足

ありがとうございます・・・でも、「誤差なく」値を出せということだったんでこんなに複雑になったんです。
ヒントとして“X=(X+Y√m)/Zのカタチで書けることが帰納法で証明出来る”というのがあったんで・・・・・

補足日時:2001/07/11 12:35
    • good
    • 0
この回答へのお礼

無事にプログラム完成致しました。ありがとうございました♪

お礼日時:2001/07/12 17:06

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q平方根の連分数展開の周期

何冊か数論の本を読んでみたのですが、見つけることができませんでした。

Dを平方数でない自然数とするとき、√Dの連分数展開は周期を持つ無限連分数になります。もちろんこの周期自体は実際に連分数展開してみないことにはわかりませんが、周期が偶数になるか奇数になるかは簡単に判定できるのではないか、と思いました。このことはx^2-Dy^2=-1が整数解を持つかどうかと同値で、また判別式が-1になることとも同値だと思います。しかしいずれにしても連分数展開を実行してみない以上わからないので不便です。

D=n^2-2と書けないこと、かつD=p_1^{r_1}…p_k^{r_k}と素因数分解したとき、p_iたちすべてがmod 4で3と合同でない、ということと、連分数展開の周期が奇数であることは同値だと予想したのですが、これは正しいですか?実二次体がらみの話なので、どこかに書いてあるとは思うのですが・・・

Aベストアンサー

本題に戻りましょうw

No1.の解答の繰り返しになりますが
「Dの素因数pにp≡3 (mod 4)となるようなものが存在する⇒x^2-Dy^2=-1は整数解を持たない」ことを示しましょう。

x^2-Dy^2=-1となる整数xとyが存在すると仮定する。
x^2+1^2=Dy^2≡0 (mod p)となります。
このときxと1は互いに素になります。
しかし、このことはNo4.私が示した命題
「aとbを互いに素な自然数とします。
a^2+b^2の素因数pはp=2あるいはp≡1 (mod 4)となる。また、a^2+b^2は4で割り切れない。」・・・○
に反します。

よって、Dの素因数は2あるいは、4で割って1あまる素数であることがわかる。

「Dが4で割り切れる⇒x^2-Dy^2=-1は整数解を持たない」を示しましょう。

x^2-Dy^2=-1となる整数xとyが存在すると仮定する。
x^2=Dy^2-1≡-1 (mod 4)となります。
x^2≡0or1 (mod 4)だから、これは不合理

よって「Dが4、あるいは4で割ると3余る素数pで割り切れる」⇒「√Dの連分数展開の周期は偶数」が言えます。

要するに「√Dの連分数展開の周期は奇数」⇒「Dの素因数には2がたかだか一つで、他は4で割って1あまる素数」という推論は正しいのです。

本題に戻りましょうw

No1.の解答の繰り返しになりますが
「Dの素因数pにp≡3 (mod 4)となるようなものが存在する⇒x^2-Dy^2=-1は整数解を持たない」ことを示しましょう。

x^2-Dy^2=-1となる整数xとyが存在すると仮定する。
x^2+1^2=Dy^2≡0 (mod p)となります。
このときxと1は互いに素になります。
しかし、このことはNo4.私が示した命題
「aとbを互いに素な自然数とします。
a^2+b^2の素因数pはp=2あるいはp≡1 (mod 4)となる。また、a^2+b^2は4で割り切れない。」・・・○
に反します。

よっ...続きを読む

QGASの.align 4,0x90の0x90の意味

Cソースをアセンブリしたとき、.align 4,0x90とでるのですが、.align 4,0x90の0x90はどういう意味ですか。align 4+NOPという意味ですか。それとも4Bを0x90で埋めろと意味ですか。どちらでしょう。

Aベストアンサー

困ったときはまずマニュアルを読む.

参考URL:https://sourceware.org/binutils/docs-2.24/as/Align.html#Align

Q連分数展開が分かりません。

√6の連分数展開ができません・・・。
よろしくお願いします。

Aベストアンサー

ω = √6 - 2 とおくと
(ω+2)^2 = 6
ω(ω+4)=2
ω = 2/(ω+4) = 1/(2+[ω1]/2)
[ω1]のところに2/(ω+4)を代入して
= 1/(2+(2/(ω+4))/2)
= 1/(2+(1/(4+[ω2]))
[ω2]のところに2/(ω+4)を代入
これを続けると2と4が交互にあらわれる。

連分数展開の整数部分を並べて{k1,k2,k3,k4,・・・}と表す事にすると
√6 = {2,[2,4]}(ここで記号[2,4]は2と4が交互に現れ、それが繰り返されることを示す事とする)

QBASICで画像のx,y座標の取得方法について

Active Basicでプログラムを書いています。

今、簡単なゲームを作ってみようと思い、プログラムを書いているのですが、画像の座標の取得の部分で躓いてしました。

画像Aに画像Bが触れたときに『アウト』とメッセージを出す、簡単な、物を避けるゲームなのですが、グローバルで、
Dim BombRect As RECT
Dim HitoRect As RECT
を定義して、画像が重なったかどうかを判定するときに、
GetWindowRect(hBmp04,BombRect)
GetWindowRect(hBmp01,HitoRect)
で、読み込もうとしましたが、座標が格納されてくれません。
hBmp01とhBmp04には、下のようにして画像を読み込みました。

'グローバル
Dim hBmp01 As HWND
Dim hBmp02 As HWND
Dim hBmp03 As HWND
Dim hBmp04 As HWND
'ウインドウ作成時
hBmp01 = LoadImage(0,".\画像\人\普通.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE)
hBmp02 = LoadImage(0,".\画像\人\右.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE)
hBmp03 = LoadImage(0,".\画像\人\左.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE)
hBmp04 = LoadImage(0,".\画像\爆弾\ボム.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE)

もし、やり方をご存知の方がいらっしゃいましたら、すみませんが、ご教授お願いします。
また、もっと簡単な方法がありましたら、そちらも教えていただけると嬉しいです。

Active Basicでプログラムを書いています。

今、簡単なゲームを作ってみようと思い、プログラムを書いているのですが、画像の座標の取得の部分で躓いてしました。

画像Aに画像Bが触れたときに『アウト』とメッセージを出す、簡単な、物を避けるゲームなのですが、グローバルで、
Dim BombRect As RECT
Dim HitoRect As RECT
を定義して、画像が重なったかどうかを判定するときに、
GetWindowRect(hBmp04,BombRect)
GetWindowRect(hBmp01,HitoRect)
で、読み込もうとしましたが、座標が格納されてくれ...続きを読む

Aベストアンサー

 こんばんは。

 GetWindowRect()はウィンドウから四方のサイズを取る為の物です。
 ファイルからロードして来たビットマップは、ウィンドウではないので、GetWindowRect()を使っても効果が無いのです。
 hBmp01~hBmp04は「As HWND」ではなく、「As HBITMAP」で無いといけません。

 ビットマップから直接「x、y」座標(現在居る位置の方)を取る事は出来ません。プログラム側が座標を保有していないといけません。
 又、ビットマップから「横・縦」幅を取るには以下のBITMAP構造体とGetObject()を使用すれば出来ます。

 「BITMAP構造体」
 http://msdn.microsoft.com/ja-jp/library/k1sf4cx2(VS.80).aspx

 「windowsプログラミング・ビットマップ描画」
 http://den3.moe.hm/elope/index.php?Windows%A5%D7%A5%ED%A5%B0%A5%E9%A5%DF%A5%F3%A5%B0%A1%A6%A5%D3%A5%C3%A5%C8%A5%DE%A5%C3%A5%D7%C9%C1%B2%E8

 以下の様にしてhBmp01の「横・縦」幅を取ります。
 Dim bm As BITMAP
 GetObject(hBmp01, SizeOf(BITMAP), bm)
 With bm
   .bmWidth'横幅が入っている
   .bmHeight'縦幅が入っている
 End With

 こんばんは。

 GetWindowRect()はウィンドウから四方のサイズを取る為の物です。
 ファイルからロードして来たビットマップは、ウィンドウではないので、GetWindowRect()を使っても効果が無いのです。
 hBmp01~hBmp04は「As HWND」ではなく、「As HBITMAP」で無いといけません。

 ビットマップから直接「x、y」座標(現在居る位置の方)を取る事は出来ません。プログラム側が座標を保有していないといけません。
 又、ビットマップから「横・縦」幅を取るには以下のBITMAP構造体とGetObject()...続きを読む

Qf(x)=√(1+x)の連分数展開のやり方を教えてください。

f(x)=√(1+x)の連分数展開のやり方を教えてください。

Aベストアンサー

>f(x)=√(1+x)の連分数展開のやり方 ....

順次代入していく方法だけ。

  f(x) = 1 + 1/g(x)
と置くと、
  g(x) = (1+f(x))/x
なので、
  f(x) = 1 + x/(1+f(x))  …(A)
という f(x) だけの分数式を得る。

式(A)の末尾の f(x) へ、式(A)の右辺自身 1 + x/(1+f(x)) を代入すると、
  f(x) = 1 + x/[2+ {x/(1+f(x)})]  …(B)

あとは、この代入操作を際限なく繰り返していく。
…というものです。

Qruby "\001\376".unpack("C*") => [1, 254]の意味

"\001\376".unpack("C*") => [1, 254] の
[1, 254]ってどういう数字を意味するのですか?8ビット整数なのに配列で結果が出ていることの意味がわかりません。ご教授ください。

Aベストアンサー

"\001\376"
は、バイナリ文字列で
"C*"

バイトとして数値を取り出し配列にする
ということだと思います。
\376は、8進数で、10進にすると254になります。
見当違いだったらすみません。

Q連分数展開

有理数や無理数の連分数展開のやり方が分からないのですが、どうしたらできるのでしょうか?
逆に√2の連分数から√2を求める事には成功しています。
x+1=2+(1/x+1)をときました。
同じ感じで逆に計算していけば連分数が求まると思ったのですが、なかなかそうもいきませんでした。

Aベストアンサー

A[i]の整数部分をB[i], 小数部分をC[i]としたときに、A[i+1]=1/C[i]とすればOKと考えます。

A[1]=B[1]+1/A[2]
=B[1]+1/(B[2]+1/A[3])
=B[1]+1/(B[2]+1/(B[3]+1/…))

もちろん、C[i]=0になれば、そこで連分数展開は終了。また、A[m]=A[n]の場合は、連分数展開が循環することになります。

√3の連分数展開を考えると、
A[1]=√3, B[1]=1, C[1]=√3-1
A[2]=(√3+1)/2, B[2]=1, C[2]=(√3-1)/2
A[3]=√3+1, B[3]=2, C[3]=√3-1
A[4]=A[2]は明らか。これらから
B[i]は1,1,2,1,2,1,2,...という数列をなす。

したがって、√3="1" + 1/("1" + 1/("2" + 1/("1" + 1/("2" + 1/...))))
となります。

QZ80,PIC,H8について

ハード、ソフトの勉強がしたくてマイコンを作ろうと考えているのですがタイトルの3つのうちのどれにしようか悩んでいます。
自分としてはZ80を作りたいと思っていたですが秋月にあるAKI-80のゴールドキット以外にも必要ということでどうしようか悩んでいます。
(今月中に出せるお金が5千~1万のため。)
やることによってかかるお金は違うと思いますが目安として
それぞれ大体どのぐらいの投資が必要ですか?
それとテスターはすぐに買う必要があるのでしょうか?

Aベストアンサー

PICはデバッグが面倒なのと、以外にお金がかかるのが弱点ですかね。
AKI-80(Z80)は何も付いていないので外付けの表示装置やらSWやらを自分で汎用基板で自作しなくてはなりませんので難易度が高いです。
H8でしたらZ80と比べて遜色ないCPUですしネット上の情報や書籍も多い。そして秋月のメイン商品ですからバリエーションも豊富です。

で、私としてはH8をお勧めしたいですね。特にこのキット。
http://akizukidenshi.com/catalog/g/gK-00168/
このキットのポイントはROMが百回程度しか書き換えできないので、デバッグ時にプログラムをROM変わりに豊富なRAMに置ける(最重要)のと、全て付いて5700円で買えること。SWやらLEDやらLCDなど初心者が実験に使うのは十分な入出力が揃っている事です。LANも付いてて勉強が進めばLANも使えるようになります。
あとマイコンの開発にはパソコン側にCOM(RS232C)端子が必要です。確認してから購入してください。ない場合は補足してください。

>それとテスターはすぐに買う必要があるのでしょうか?
キット組み立て時に導通試験用にほしいですね。秋月で同時購入されてはどうでしょうか?
http://akizukidenshi.com/catalog/g/gM-00137/
日本語説明書つきの一番安いやつです。

PICはデバッグが面倒なのと、以外にお金がかかるのが弱点ですかね。
AKI-80(Z80)は何も付いていないので外付けの表示装置やらSWやらを自分で汎用基板で自作しなくてはなりませんので難易度が高いです。
H8でしたらZ80と比べて遜色ないCPUですしネット上の情報や書籍も多い。そして秋月のメイン商品ですからバリエーションも豊富です。

で、私としてはH8をお勧めしたいですね。特にこのキット。
http://akizukidenshi.com/catalog/g/gK-00168/
このキットのポイントはROMが百回程度しか書...続きを読む

Qmの平方根の連分数展開なのですがうまく動きません。

subroutine keisan(m)
integer a,a0,n,i,m
real t,X,Y,Z
t=sqrt(real(m))
a0=int(t)
write(*,*) 'a0=',a0
a=a0
X=1
Y=0
Z=1
do 10 n=1,20
if (Z==0.0) exit
X=X*Z
Y=Z*(-Y+real(a)*Z)
Z=X*X*real(m)-(real(a)*Z-Y)**2
do 100 i=1,X
if(real(i)==X) then
X=X
else
if(((mod(int(X),i))==0).AND.((mod(int(Y),i))==0).AND.((mod(int(Z),i))==0)) then
X=X/real(i)
Y=Y/real(i)
Z=Z/real(i)
else
X=X
endif
endif
100 continue
a=int((X*t+Y)/Z)
write(*,*) 'a',n,'=',a
10 continue
end subroutine
サブルーチンのみ載せてますけど・・・・どうなのでしょう??

subroutine keisan(m)
integer a,a0,n,i,m
real t,X,Y,Z
t=sqrt(real(m))
a0=int(t)
write(*,*) 'a0=',a0
a=a0
X=1
Y=0
Z=1
do 10 n=1,20
if (Z==0.0) exit
X=X*Z
Y=Z*(-Y+real(a)*Z)
Z=X*X*real(m)-(real(a)*Z-Y)**2
do 100 i=1,X
if(real(i)==X) then
X=X
else
if(((mod(int(X),i))==0)...続きを読む

Aベストアンサー

なんで、こんな難しくなるの?

一番単純な形だと、

        1
√m = a1 + ──
        X

で、a1 は、√mの整数部。で、この X は、√m-a1 の逆数で、
それを又、この形にしてゆく、の繰返しでしょ。

   subroutine keisan(m)

   integer i,m,a;
   double x;
  
   x = sqrt(real(m))
   a = int(x);
  
   write(*,*) 'a=',a
  
   do 10 i = 1, 20
    if (x .eq. a) return;
    x = 1.0 / (x - a)
    a = int(x)
    write(*,*) 'a=',a
 10 continue

   return
   end

# fortran は、ずいぶん久しぶりなので、文法間違いがあったらごめんなさい

QCOBOL PICTUREで X,S,Vの意味

COBOL PICTUREで X(03) S9(01) とか V9(02)とか記載されているのマトリックス表があるのですが、この意味を教えてください。

Aベストアンサー

例ですが
「X(02)」または「XX」は、英数字の2バイトを表す
「9(02)」または「99」は、数字の2バイトを表す
「S9(02)」または「S99」は、符号付き数字の2バイトを表す
「9(02)V9(03)」または「99V999」は、小数点付き数字の整数部2バイト小数部3バイトを表す


人気Q&Aランキング

おすすめ情報