新しく発言する EXIT インデックスへ
計算

  計算2005/12/13 01:39:00 
  ピタゴラス数を探すプログラムは, 白石 和夫 2005/12/13 10:43:50 
  │└補足 白石 和夫 2005/12/13 16:23:42 
  │ └誤差を丸める関数を、以前、数値計算の必要... 荒田浩二 2005/12/21 09:40:16 
  アドヴァイスありがとうございます。ピタゴ...2005/12/13 18:38:15 

  計算2005/12/13 01:39:00  ツリーへ

計算 返事を書く
2005/12/13 01:39:00
 次のプログラムを考えています。誰かアドヴァイスをお願いします。

 1279=9^3+10^3=12^3+1^3のように、整数が、異なる二通りの二つの平方和であらわされる数を探し出したいのです。つまり、a=b^3+c^3=d^3+e^3 となるa,b,c,d,eです。よろしくお願いします。

  ピタゴラス数を探すプログラムは, 白石 和夫 2005/12/13 10:43:50  ツリーへ

Re: 計算 返事を書く
白石 和夫 2005/12/13 10:43:50
ピタゴラス数を探すプログラムは,
10 FOR c=1 TO 100
20 FOR b=1 TO c
30 FOR a=1 TO b
40 IF a^2+b^2=c^2 THEN PRINT a;b;c
50 NEXT a
60 NEXT b
70 NEXT c
80 END
のように作ることができます。参考にしてください。

  │└補足 白石 和夫 2005/12/13 16:23:42  ツリーへ

Re: ピタゴラス数を探すプログラムは, 返事を書く
白石 和夫 2005/12/13 16:23:42
補足
Full BASICでは,aが整数のとき,a^3の有効数字の桁数がそのシステムのが規定する桁数を超えない限りa^3は正確な値を持つことが保証されます。
aが平方数のとき,SQR(a)やa^0.5は正確に求まることがFull BASIC規格から導かれるのですが,aが立方数であるときのa^(1/3)は正しく求まりません。Full BASICでは,1/3は,0.3333333333333のような近似値になってしまうからです。なので,ピタゴラス数を求める算法
10 FOR x=1 TO 100
20 FOR y=x TO 100
30 LET z=SQR(x^2+y^2)
40 IF INT(z)=z THEN PRINT x,y,z
50 NEXT y
60 NEXT x
70 END
を応用するのは簡単ではありません。

  │ └誤差を丸める関数を、以前、数値計算の必要... 荒田浩二 2005/12/21 09:40:16  ツリーへ

Re: 補足 返事を書く
荒田浩二 2005/12/21 09:40:16
誤差を丸める関数を、以前、数値計算の必要に迫られて作りました。この関数をうまく使えばピタゴラス数を求めるプログラムに応用できるのではないでしょうか。
この関数は、どんな型の数値でも途中に9か0が連続してr桁現れたときは丸めるというもので、本来は1000桁モードでr=40くらいで利用しています。ただし、有理数モードでは元の数値が整数以外では異常な値を返します。有理数モードでは使用しないほうが良いでしょう。

REM *******************************
REM ********* 誤差丸め **********
REM *******************************
!OPTION ARITHMETIC DECIMAL_HIGH
DECLARE EXTERNAL FUNCTION fnround
DO
READ IF MISSING THEN EXIT DO:a
PRINT a
PRINT fnround(a)
LOOP
DATA 34.99999921,-72.00000046,83.629999999914,704.2300000058
DATA -836999999973,1500000096,3.7999999E17,-4300.0000729,6199999.9307
DATA 99999999,230000005999999,0.000000007999999,-54.200000072E-9
! 丸めない例
DATA 57.36,81.99999,-62000004,24000.0085,-7599.99982
DATA 0.000000034
END

REM *************************************
REM ******* 誤差丸め 外部関数 *********
REM 数値内の連続するr桁の9または0を丸める
REM *************************************
EXTERNAL FUNCTION fnround(p)
!OPTION ARITHMETIC DECIMAL_HIGH
LET r9=6 ! 9を丸める桁数(r9>=2),丸めないときはr9=1020
LET r0=6 ! 0を丸める桁数(r0>=2),丸めないときはr0=1020
LET nine$=REPEAT$("9",r9)
LET zero$=REPEAT$("0",r0)

! pを文字列に変換
LET ps=SGN(p)
LET p=ABS(p)
LET pc$=STR$(p)
LET pl=LEN(pc$)

! 絶対値1未満で,小数点に続く0を考慮、0.000000034=0とする。
!IF p<10^(-r0) THEN
! LET fnround=0
! EXIT FUNCTION
!END IF

! 指数部調整
LET ppe=POS(pc$,"E")
LET pe=0
IF ppe<>0 THEN
LET pe=VAL(pc$(ppe+1:pl))
LET pc$=pc$(1:ppe-1)
LET pl=LEN(pc$)
LET p=VAL(pc$)
END IF

! 小数を整数化
LET ppp=POS(pc$,".")
LET pie=0
IF ppp<>0 THEN
LET pie=pl-ppp
LET p=p*10^pie
LET pc$=STR$(p)
LET pl=LEN(pc$)
END IF

! 連続するr0桁の0を切り捨て
LET ppz=POS(pc$,zero$)
IF ppz<>0 THEN LET p=ROUND(p,-pl+ppz+1)
! 連続するr9桁の9を繰り上げ
LET ppn=POS(pc$,nine$)
IF ppn<>0 THEN LET p=ROUND(p,-pl+ppn+1)

! ps;符号、p;丸めた整数、pie;小数点の位置、pe;指数部
LET fnround=ps*p*10^(-pie)*10^pe
END FUNCTION

  アドヴァイスありがとうございます。ピタゴ...2005/12/13 18:38:15  ツリーへ

Re: 計算 返事を書く
2005/12/13 18:38:15
アドヴァイスありがとうございます。ピタゴラス数とは、簡単なプログラムで見つかるんですね。貴重なアドヴァイスを参考にします。


インデックスへ EXIT
新規発言を反映させるにはブラウザの更新ボタンを押してください。