計算 桜 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 | |
アドヴァイスありがとうございます。ピタゴラス数とは、簡単なプログラムで見つかるんですね。貴重なアドヴァイスを参考にします。 |