by 斉藤 圭佑 » 2006年11月01日(水) 22:18
対応策を丁寧にアドバイスしていただき、ありがとうございます。
konisiさんが作成されたプログラムをこちらで編集せずそのまま走らせてみたのですが、実行画面は固まってしまい、ソース画面には
“スレッド(&HF64)でアクセス違反がありました(EPI=&H00402518)”
と表示が出てしまい実行ができませんでした。
また、konisiさんと7さんのアドバイスを元に自分なりにプログラムを作ってみました。
konisiさんと7さんのアドバイスのおかげでコンパイル時のエラーはなんとか消えたのですが、実行を行う際に実行画面が固まってしまいます。プログラムのどこかがおかしいのでしょうか。
具体的にどこがおかしいかも知れないというところが判らないので質問が漠然としてしまい申し訳ありません。
以下にプログラム上でOpenされるファイルと、MS-DOS上で正常に実行された場合に書き出されるデータをアップしています。
http://briefcase.yahoo.co.jp/bc/keisukk ... http%3a//b
自分なりに作成したプログラムソースです。
[ここをクリックすると内容が表示されます] [ここをクリックすると非表示にします]コード: 全て選択
#N88BASIC
1000 '****************************************************
1010 ' FFTANA.BAS
1020 '*
1030 '************************************************************
1040 DIM D(256) As Byte '型が合っているかどうか
'1041 DIM PNT As Double
1042 DIM X$ As String
1043 DIM Y$ As String
1044 DIM N As Long
1045 DIM M As Double
'1050 PNT=400 'PNTは何を意味するのか point?
1060 OPEN "DAT3-14.FRK" As #1 ' FILE NAME
1070 FIELD #1,128 ' DATA BUFFER
1080 Get #1,1,X$
1090 Get #1,1,Y$
1100 FOR N=1 TO 128
1120 D(N)=Asc(Mid$(X$,N,1))
1130 NEXT
1140 FOR N=1 TO 128
1160 D(N+128)=Asc(Mid$(Y$,N,1))
1170 NEXT
1180 Close #1
1190 GOTO 1210
1200 '
1210 '************ ADRESS OF<Gaa> DATA *******************
1211 DIM STBAA As Long
1212 DIM DTBAA As Long
1220 STBAA=D(147)*256+D(148) ' START BLOCK NO.
1230 DTBAA=(D(150)*256+D(151))*256+D(152) ' DATA1 BYTE NO.
1231 DIM X1 As Long
1232 DIM X2 As Long
1233 DIM X3 As Long
1234 DIM X4 As Long
1240 X1=D(153)
1241 X2=D(154)
1250 X3=D(155)
1251 X4=D(156)
1251 DIM SIGN As Double
1252 DIM EXPO1 As Double
1253 DIM EXPO# As Double
1254 DIM FRAC# As Double
1255 DIM SCL# As Double
1256 DIM RE As Double '1310行のREとRE#のこと.どちらかなのか両方定義するのかわからん
1257 DIM RE# As Double 'イマのところREとRE#を区別して両方定義している 2060参照 別の意味として扱ってるっぽい
1258 DIM SCLAA As Double
1260 SIGN=(-1)^((X1 AND 128)/128)
1270 EXPO1=((X1 AND 127)*2+(X2 AND 128)/128)-127
1280 EXPO#=2^EXPO1
1290 FRAC#=(X2 OR 128)/128+X3/(128*256)+X4/(128*256*256)
1300 SCL#=SIGN*EXPO#*FRAC#
'1310 IF Abs(RE#)<=1E-38 THEN RE#=0
1320 SCLAA=SCL#/10^6
1330 GOTO 1350
1340 '
1350 '************* ADRESS OF <Gbb> DATA *****************
1351 DIM STBBB As Double
1352 DIM DTBBB As Double
1353 DIM SCLBB As Double
1360 STBBB=D(163)*256+D(164) ' START BLOCK NO.
1370 DTBBB=(D(166)*256+D(167))*256+D(168) ' DATA BYTE NO.
1380 '
1390 X1=D(169)
1391 X2=D(170)
1400 X3=D(171)
1401 X4=D(172)
1410 SIGN=(-1)^((X1 AND 128)/128)
1420 EXPO1=((X1 AND 127)*2+(X2 AND 128)/128)-127
1430 EXPO#=2^EXPO1
1440 FRAC#=(X2 OR 128)/128+X3/(128*256)+X4/(128*256*256)
1450 SCL#=SIGN*EXPO#*FRAC#
'1460 IF Abs(RE#)<=1E-38 THEN RE=0 '上と同様のREとRE#について
1470 SCLBB=SCL#/10^6
1480 GOTO 1500
1490 '
1500 ' *********** ADRESS OF <Gbb> DATA ******************
1501 DIM STB As Double
1502 DIM DTB As Double
1503 DIM KK As Long
1504 DIM SCLAB As Double
1510 STB=D(179)*256+D(180) ' START BLOCK NO.
1520 DTB=(D(182)*256+D(183))*256+D(184) ' DATA3 BYTE NO.
1530 KK=2
1540 X1=D(185)
1541 X2=D(186)
1550 X3=D(187)
1551 X4=D(188)
1560 SIGN=(-1)^((X1 AND 128)/128)
1570 EXPO1=((X1 AND 127)*2+(X2 AND 128)/128)-127 'ANDの表現はこれでいいのか?
1580 EXPO#=2^EXPO1
1590 FRAC#=(X2 OR 128)/128*X3/(128*256)+X4/(128*256*256)
1600 SCL#=SIGN*EXPO#*FRAC#
'1610 IF Abs(RE#)<=1E-38 THEN RE=0 'RE#とREについて
1620 SCLAB=SCL#/10^6
1630 GOTO 1650
1640 '
1650 '
'1651 DIM ERASE As Double
1660 D(256)=0 '配列Dの消去という意味 やり方わからん
1670 '
1680 '
1690 '
1691 DIM LOOPe As Double 'LOOPで定義するのはよくないかも.色が変わってる
1692 DIM DTM As Long 'LOOPで定義するのはよくないかも.色が変わってる
1700 LOOPe=Int(DTB/256)+1
1710 DIM DD As *Double '()内をどう表現するか.文字はまずいらしい
1711 DD=calloc(SizeOf(Double)*(DTB+300))
1712 DD[0]=0.1
1713 DD[1]=0.2
1720 DIM BB(420) As Double
1730 DIM AF(420) As Double
1740 DIM AI(420) As Double
1741 DIM AR(420) As Double
1742 DIM I As Double
1750 OPEN "DAT3-14.FRK" As #1 'FILE NAME
1760 FIELD #1,128 'DATA BUFFER
'1760 FIELD #1,128 As X$ 'DATA BUFFER
'1761 FIELD #1,128 As Y$ 'DATA BUFFER
1770 FOR I=1 TO LOOPe 'LOOPを他の文字に変えて表現しなくていいのか?
1780 '
1790 GET #1,STB+I,X$ 'この辺から不安!!!!!!
1790 GET #1,STB+I,Y$
1800 FOR N=1 TO 128
1810 M=256*(I-1)+N
1820 DD(M)=Asc(Mid$(X$,N,1))
1830 NEXT
1840 FOR N=1 TO 128
1850 M=256*(I-1)+N+128
1860 DD(M)=Asc(Mid$(Y$,N,1))
1870 NEXT
1880 NEXT 'この辺まで不安!!!!!!
1890 CLOSE #1
1900 '
1910 '
1911 DIM P As Long
1712 DIM W As Long
1713 DIM S As Long
1714 DIM REAB As Double
1920 OPEN "DAT-GAB.DAT" FOR OUTPUT As #2
1930 P=KK*4
1940 W=0
1950 S=0
1960 FOR N=1 TO DTB STEP P
1970 X1=DD(N)
1971 X2=DD(N+1)
1980 X3=DD(N+2)
1981 X4=DD(N+3)
1990 '
2000 SIGN=(-1)^((X1 AND 128)/128)
2010 EXPO1=((X1 AND 127)*2+(X2 AND 128)/128)-127
2020 EXPO#=2^EXPO1
2030 FRAC#=(X2 OR 128)/128+X3/(128*256)+X4/(128*256*256)
2040 RE#=SIGN*EXPO#*FRAC#
2050 IF Abs(RE#)<=1E-38 THEN RE=0 :GOTO 2090 'この辺から不安!!!!!
2060 RE#=RE/10^6
2070 REAB=RE*SCLAB 'この辺まで不安!!!!!!
2080 '
2090 '
2100 '
2101 DIM X5 As Long
2102 DIM X6 As Long
2103 DIM X7 As Long
2104 DIM X8 As Long
2105 DIM IM As Double
2106 DIM IM# As Long
2107 DIM IMAB As Double
2108 DIM R As Double
2109 DIM CISO As Double
2110 X5=DD(N+4)
2111 X6=DD(N+5) ' IMAG DATA READ
2120 X7=DD(N+6)
2121 X8=DD(N+7)
2130 SIGN=(-1)^((X5 AND 128)/128)
2140 EXPO1=((X5 AND 127)*2+(X6 AND 128)/128)-127
2150 EXPO#=2 ^ EXPO1
2160 FRAC#=(X6 OR 128)/128+X7/(128*256)+X8/(128*256*256)
2170 IM#=SIGN*EXPO#*FRAC#
2180 IF Abs(IM#)<=1E-38 THEN IM=0 :GOTO 2240 'この辺から不安!!!!!!!
2190 IM=IM#/10^6
2200 IMAB=IM*SCLAB
2210 R=Sqr(RE*RE+IM*IM)
2220 AI(S)=IM
2221 AR(S)=RE
2230 CISO=IM/RE
2231 AF(S)=180/3.1415*Atn(CISO)
2232 BB(S)=R 'この辺まで不安!!!!!!!!
2233 '
2234 '
2235 '
2236 '
2237 '
2240 S=S+1
2250 PRINT #2 ,W,REAB,IMAB
2260 W=W+0.25
2270 NEXT N
2280 CLOSE #2
2290 '
2300 '
2310 LOOPe=Int(DTBAA/256)+1 'この辺から不安!!!!!!
'2320 DIM DD#(DTBAA+300) As Double
2321 DIM DD# As *Double
2322 DD#=calloc(SizeOf(Double)*(DTBAA+300))
2323 DD#[0]=0.1
2324 DD#[1]=0.2
2330 DIM BB#(420) As Long
'2340 DD#=calloc(DTBAA+300)
2350 OPEN "DAT3-14.FRK" As #1
2360 FIELD #1,128
'2360 FIELD #1,128 AS X$
'2361 FIELD #1,128 AS Y$
2370 FOR I=1 TO LOOPe
2380 '
2390 GET #1,STBAA+I,X$
2390 GET #1,STBAA+I,Y$
2400 FOR N=1 TO 128
2410 M=256*(I-1)+N
2420 DD#(M)=Asc(Mid$(X$,N,1))
2430 NEXT
2440 FOR N=1 TO 128
2450 M=256*(I-1)+N+128
2460 DD#(M)=Asc(Mid$(Y$,N,1)) 'この辺まで不安!!!!!!
2470 NEXT
2480 '
2490 NEXT
2500 '
2510 CLOSE #1
2520 OPEN "DAT-GAA.DAT" FOR OUTPUT As #2
2530 '
2540 S=0
2550 W=0
2560 P=4
2570 FOR N=1 TO DTBAA STEP P
2580 X1=DD#(N) :X2=DD#(N+1)
2590 X3=DD#(N+2) :X4=DD#(N+3)
2600 SIGN=(-1)^((X1 AND 128)/128)
2610 EXPO1=((X1 AND 127)*2+(X2 AND 128)/128)-127
2620 EXPO#=2^EXPO1
2630 FRAC#=(X2 OR 128)/128+X3/(128*256)+X4/(128*256*256)
2640 RE#=SIGN*EXPO#*FRAC#
2650 IF Abs(RE#)<=1E-38 THEN RE=0 :GOTO 2700
2660 RE=RE#/10^6 'この辺のREの区別が不安!!!!!!
2661 DIM GAA As Double
2670 GAA=SCLAA*RE
2680 BB#(S)=1/RE
2690 S=S+1
2700
2710 PRINT #2 ,W,GAA
2720 W=W+0.25
2730 NEXT N
2740 '
2750 CLOSE #2
2760 '
2761 DIM GAI As Double
2762 DIM GAIN As Double
2763 DIM GAINY As Double
2764 DIM GAINN As Double
2765 DIM GAIN# As Double
2766 DIM FASE As Double
2770 OPEN "GAIN.DAT" FOR OUTPUT As #2
2780 W=0.25
2790 FOR S=1 TO 400
2800 GAI=BB(S)*BB#(S)
2810 GAIN=Log(GAI)
2820 GAINY=Log(10)
2830 GAINN=GAIN/GAINY
2840 GAIN#=20*GAINN
2841 FASE=AF(S)
2842 IF AR(S)>0 AND AI(S)>0 THEN FASE=FASE 'この辺から不安!!!!!
2843 IF AR(S)>0 AND AI(S)<0 THEN FASE=FASE
2844 IF AR(S)<0 AND AI(S)<0 THEN FASE=FASE-180
2845 IF AR(S)<0 AND AI(S)>0 THEN FASE=FASE+180 'この辺まで不安!!!!!
2850 PRINT #2,W,GAIN#,FASE
2860 W=W+0.25
2870 NEXT S
2880 CLOSE #2
2900 '
2910 '
2920 LOOPe=Int(DTBBB/256)
2930 DIM DDD As *Double
2931 DDD=calloc(SizeOf(Double)*(DTBBB+300))
2932 DDD[0]=0.1
2933 DDD[1]=0.2
'2940 DDD=calloc(DTBBB+300)
2950 OPEN "DAT3-14.FRK" As #1 'この辺から不安!!!!!
2960 FIELD #1,128
'2960 FIELD #1,128 AS X$
'2961 FIELD #1,128 AS Y$
2970 FOR I=1 TO LOOPe
2980 '
2990 GET #1,STBBB+I,X$
2991 GET #1,STBBB+I,Y$
3000 FOR N=1 TO 128
3010 M=256*(I-1)+N
3020 DDD(M)=Asc(Mid$(X$,N,1))
3030 NEXT
3040 FOR N=1 TO 128
3050 M=256*(I-1)+N+128
3060 DDD(M)=Asc(Mid$(Y$,N,1)) 'この辺まで不安!!!!!
3070 NEXT
3080 '
3090 NEXT
3100 CLOSE #1
3110 '
2930 DIM GBB# As Double
2930 DIM GBB As Double
3111 OPEN "DAT-GBB.DAT" FOR OUTPUT As #2
3112 '
3113 W=0
3120 P=4
3130 FOR N=1 TO DTBBB STEP P
3140 X1=DDD(N)
3141 X2=DDD(N+1)
3150 X3=DDD(N+2)
3151 X4=DDD(N+3)
3160 SIGN=(-1)^((X1 and 128)/128)
3170 EXPO1=((X1 AND 127)*2+(X2 AND 128)/128)-127
3180 EXPO#=2^EXPO1
3190 FRAC#=(X2 OR 128)/128+X3/(128*256)+X4/(128*256*256)
3200 GBB#=SIGN*EXPO#*FRAC#
3210 IF Abs(GBB#)<=1E-38 THEN GBB=0 :GOTO 3240
3220 GBB=SCLBB*GBB#/10^6
3230 '
3240 '
3250 PRINT #2 ,W,GBB
3251 W=W+0.25
3260 NEXT N
3270 CLOSE #2
3280 free(DD)
3281 free(DD#)
3282 free(DDD)
3290 END
対応策を丁寧にアドバイスしていただき、ありがとうございます。
konisiさんが作成されたプログラムをこちらで編集せずそのまま走らせてみたのですが、実行画面は固まってしまい、ソース画面には
“スレッド(&HF64)でアクセス違反がありました(EPI=&H00402518)”
と表示が出てしまい実行ができませんでした。
また、konisiさんと7さんのアドバイスを元に自分なりにプログラムを作ってみました。
konisiさんと7さんのアドバイスのおかげでコンパイル時のエラーはなんとか消えたのですが、実行を行う際に実行画面が固まってしまいます。プログラムのどこかがおかしいのでしょうか。
具体的にどこがおかしいかも知れないというところが判らないので質問が漠然としてしまい申し訳ありません。
以下にプログラム上でOpenされるファイルと、MS-DOS上で正常に実行された場合に書き出されるデータをアップしています。
http://briefcase.yahoo.co.jp/bc/keisukke0215/lst?.dir=/455d&.order=&.view=l&.src=bc&.done=http%3a//b
自分なりに作成したプログラムソースです。
[hide][code]
#N88BASIC
1000 '****************************************************
1010 ' FFTANA.BAS
1020 '*
1030 '************************************************************
1040 DIM D(256) As Byte '型が合っているかどうか
'1041 DIM PNT As Double
1042 DIM X$ As String
1043 DIM Y$ As String
1044 DIM N As Long
1045 DIM M As Double
'1050 PNT=400 'PNTは何を意味するのか point?
1060 OPEN "DAT3-14.FRK" As #1 ' FILE NAME
1070 FIELD #1,128 ' DATA BUFFER
1080 Get #1,1,X$
1090 Get #1,1,Y$
1100 FOR N=1 TO 128
1120 D(N)=Asc(Mid$(X$,N,1))
1130 NEXT
1140 FOR N=1 TO 128
1160 D(N+128)=Asc(Mid$(Y$,N,1))
1170 NEXT
1180 Close #1
1190 GOTO 1210
1200 '
1210 '************ ADRESS OF<Gaa> DATA *******************
1211 DIM STBAA As Long
1212 DIM DTBAA As Long
1220 STBAA=D(147)*256+D(148) ' START BLOCK NO.
1230 DTBAA=(D(150)*256+D(151))*256+D(152) ' DATA1 BYTE NO.
1231 DIM X1 As Long
1232 DIM X2 As Long
1233 DIM X3 As Long
1234 DIM X4 As Long
1240 X1=D(153)
1241 X2=D(154)
1250 X3=D(155)
1251 X4=D(156)
1251 DIM SIGN As Double
1252 DIM EXPO1 As Double
1253 DIM EXPO# As Double
1254 DIM FRAC# As Double
1255 DIM SCL# As Double
1256 DIM RE As Double '1310行のREとRE#のこと.どちらかなのか両方定義するのかわからん
1257 DIM RE# As Double 'イマのところREとRE#を区別して両方定義している 2060参照 別の意味として扱ってるっぽい
1258 DIM SCLAA As Double
1260 SIGN=(-1)^((X1 AND 128)/128)
1270 EXPO1=((X1 AND 127)*2+(X2 AND 128)/128)-127
1280 EXPO#=2^EXPO1
1290 FRAC#=(X2 OR 128)/128+X3/(128*256)+X4/(128*256*256)
1300 SCL#=SIGN*EXPO#*FRAC#
'1310 IF Abs(RE#)<=1E-38 THEN RE#=0
1320 SCLAA=SCL#/10^6
1330 GOTO 1350
1340 '
1350 '************* ADRESS OF <Gbb> DATA *****************
1351 DIM STBBB As Double
1352 DIM DTBBB As Double
1353 DIM SCLBB As Double
1360 STBBB=D(163)*256+D(164) ' START BLOCK NO.
1370 DTBBB=(D(166)*256+D(167))*256+D(168) ' DATA BYTE NO.
1380 '
1390 X1=D(169)
1391 X2=D(170)
1400 X3=D(171)
1401 X4=D(172)
1410 SIGN=(-1)^((X1 AND 128)/128)
1420 EXPO1=((X1 AND 127)*2+(X2 AND 128)/128)-127
1430 EXPO#=2^EXPO1
1440 FRAC#=(X2 OR 128)/128+X3/(128*256)+X4/(128*256*256)
1450 SCL#=SIGN*EXPO#*FRAC#
'1460 IF Abs(RE#)<=1E-38 THEN RE=0 '上と同様のREとRE#について
1470 SCLBB=SCL#/10^6
1480 GOTO 1500
1490 '
1500 ' *********** ADRESS OF <Gbb> DATA ******************
1501 DIM STB As Double
1502 DIM DTB As Double
1503 DIM KK As Long
1504 DIM SCLAB As Double
1510 STB=D(179)*256+D(180) ' START BLOCK NO.
1520 DTB=(D(182)*256+D(183))*256+D(184) ' DATA3 BYTE NO.
1530 KK=2
1540 X1=D(185)
1541 X2=D(186)
1550 X3=D(187)
1551 X4=D(188)
1560 SIGN=(-1)^((X1 AND 128)/128)
1570 EXPO1=((X1 AND 127)*2+(X2 AND 128)/128)-127 'ANDの表現はこれでいいのか?
1580 EXPO#=2^EXPO1
1590 FRAC#=(X2 OR 128)/128*X3/(128*256)+X4/(128*256*256)
1600 SCL#=SIGN*EXPO#*FRAC#
'1610 IF Abs(RE#)<=1E-38 THEN RE=0 'RE#とREについて
1620 SCLAB=SCL#/10^6
1630 GOTO 1650
1640 '
1650 '
'1651 DIM ERASE As Double
1660 D(256)=0 '配列Dの消去という意味 やり方わからん
1670 '
1680 '
1690 '
1691 DIM LOOPe As Double 'LOOPで定義するのはよくないかも.色が変わってる
1692 DIM DTM As Long 'LOOPで定義するのはよくないかも.色が変わってる
1700 LOOPe=Int(DTB/256)+1
1710 DIM DD As *Double '()内をどう表現するか.文字はまずいらしい
1711 DD=calloc(SizeOf(Double)*(DTB+300))
1712 DD[0]=0.1
1713 DD[1]=0.2
1720 DIM BB(420) As Double
1730 DIM AF(420) As Double
1740 DIM AI(420) As Double
1741 DIM AR(420) As Double
1742 DIM I As Double
1750 OPEN "DAT3-14.FRK" As #1 'FILE NAME
1760 FIELD #1,128 'DATA BUFFER
'1760 FIELD #1,128 As X$ 'DATA BUFFER
'1761 FIELD #1,128 As Y$ 'DATA BUFFER
1770 FOR I=1 TO LOOPe 'LOOPを他の文字に変えて表現しなくていいのか?
1780 '
1790 GET #1,STB+I,X$ 'この辺から不安!!!!!!
1790 GET #1,STB+I,Y$
1800 FOR N=1 TO 128
1810 M=256*(I-1)+N
1820 DD(M)=Asc(Mid$(X$,N,1))
1830 NEXT
1840 FOR N=1 TO 128
1850 M=256*(I-1)+N+128
1860 DD(M)=Asc(Mid$(Y$,N,1))
1870 NEXT
1880 NEXT 'この辺まで不安!!!!!!
1890 CLOSE #1
1900 '
1910 '
1911 DIM P As Long
1712 DIM W As Long
1713 DIM S As Long
1714 DIM REAB As Double
1920 OPEN "DAT-GAB.DAT" FOR OUTPUT As #2
1930 P=KK*4
1940 W=0
1950 S=0
1960 FOR N=1 TO DTB STEP P
1970 X1=DD(N)
1971 X2=DD(N+1)
1980 X3=DD(N+2)
1981 X4=DD(N+3)
1990 '
2000 SIGN=(-1)^((X1 AND 128)/128)
2010 EXPO1=((X1 AND 127)*2+(X2 AND 128)/128)-127
2020 EXPO#=2^EXPO1
2030 FRAC#=(X2 OR 128)/128+X3/(128*256)+X4/(128*256*256)
2040 RE#=SIGN*EXPO#*FRAC#
2050 IF Abs(RE#)<=1E-38 THEN RE=0 :GOTO 2090 'この辺から不安!!!!!
2060 RE#=RE/10^6
2070 REAB=RE*SCLAB 'この辺まで不安!!!!!!
2080 '
2090 '
2100 '
2101 DIM X5 As Long
2102 DIM X6 As Long
2103 DIM X7 As Long
2104 DIM X8 As Long
2105 DIM IM As Double
2106 DIM IM# As Long
2107 DIM IMAB As Double
2108 DIM R As Double
2109 DIM CISO As Double
2110 X5=DD(N+4)
2111 X6=DD(N+5) ' IMAG DATA READ
2120 X7=DD(N+6)
2121 X8=DD(N+7)
2130 SIGN=(-1)^((X5 AND 128)/128)
2140 EXPO1=((X5 AND 127)*2+(X6 AND 128)/128)-127
2150 EXPO#=2 ^ EXPO1
2160 FRAC#=(X6 OR 128)/128+X7/(128*256)+X8/(128*256*256)
2170 IM#=SIGN*EXPO#*FRAC#
2180 IF Abs(IM#)<=1E-38 THEN IM=0 :GOTO 2240 'この辺から不安!!!!!!!
2190 IM=IM#/10^6
2200 IMAB=IM*SCLAB
2210 R=Sqr(RE*RE+IM*IM)
2220 AI(S)=IM
2221 AR(S)=RE
2230 CISO=IM/RE
2231 AF(S)=180/3.1415*Atn(CISO)
2232 BB(S)=R 'この辺まで不安!!!!!!!!
2233 '
2234 '
2235 '
2236 '
2237 '
2240 S=S+1
2250 PRINT #2 ,W,REAB,IMAB
2260 W=W+0.25
2270 NEXT N
2280 CLOSE #2
2290 '
2300 '
2310 LOOPe=Int(DTBAA/256)+1 'この辺から不安!!!!!!
'2320 DIM DD#(DTBAA+300) As Double
2321 DIM DD# As *Double
2322 DD#=calloc(SizeOf(Double)*(DTBAA+300))
2323 DD#[0]=0.1
2324 DD#[1]=0.2
2330 DIM BB#(420) As Long
'2340 DD#=calloc(DTBAA+300)
2350 OPEN "DAT3-14.FRK" As #1
2360 FIELD #1,128
'2360 FIELD #1,128 AS X$
'2361 FIELD #1,128 AS Y$
2370 FOR I=1 TO LOOPe
2380 '
2390 GET #1,STBAA+I,X$
2390 GET #1,STBAA+I,Y$
2400 FOR N=1 TO 128
2410 M=256*(I-1)+N
2420 DD#(M)=Asc(Mid$(X$,N,1))
2430 NEXT
2440 FOR N=1 TO 128
2450 M=256*(I-1)+N+128
2460 DD#(M)=Asc(Mid$(Y$,N,1)) 'この辺まで不安!!!!!!
2470 NEXT
2480 '
2490 NEXT
2500 '
2510 CLOSE #1
2520 OPEN "DAT-GAA.DAT" FOR OUTPUT As #2
2530 '
2540 S=0
2550 W=0
2560 P=4
2570 FOR N=1 TO DTBAA STEP P
2580 X1=DD#(N) :X2=DD#(N+1)
2590 X3=DD#(N+2) :X4=DD#(N+3)
2600 SIGN=(-1)^((X1 AND 128)/128)
2610 EXPO1=((X1 AND 127)*2+(X2 AND 128)/128)-127
2620 EXPO#=2^EXPO1
2630 FRAC#=(X2 OR 128)/128+X3/(128*256)+X4/(128*256*256)
2640 RE#=SIGN*EXPO#*FRAC#
2650 IF Abs(RE#)<=1E-38 THEN RE=0 :GOTO 2700
2660 RE=RE#/10^6 'この辺のREの区別が不安!!!!!!
2661 DIM GAA As Double
2670 GAA=SCLAA*RE
2680 BB#(S)=1/RE
2690 S=S+1
2700
2710 PRINT #2 ,W,GAA
2720 W=W+0.25
2730 NEXT N
2740 '
2750 CLOSE #2
2760 '
2761 DIM GAI As Double
2762 DIM GAIN As Double
2763 DIM GAINY As Double
2764 DIM GAINN As Double
2765 DIM GAIN# As Double
2766 DIM FASE As Double
2770 OPEN "GAIN.DAT" FOR OUTPUT As #2
2780 W=0.25
2790 FOR S=1 TO 400
2800 GAI=BB(S)*BB#(S)
2810 GAIN=Log(GAI)
2820 GAINY=Log(10)
2830 GAINN=GAIN/GAINY
2840 GAIN#=20*GAINN
2841 FASE=AF(S)
2842 IF AR(S)>0 AND AI(S)>0 THEN FASE=FASE 'この辺から不安!!!!!
2843 IF AR(S)>0 AND AI(S)<0 THEN FASE=FASE
2844 IF AR(S)<0 AND AI(S)<0 THEN FASE=FASE-180
2845 IF AR(S)<0 AND AI(S)>0 THEN FASE=FASE+180 'この辺まで不安!!!!!
2850 PRINT #2,W,GAIN#,FASE
2860 W=W+0.25
2870 NEXT S
2880 CLOSE #2
2900 '
2910 '
2920 LOOPe=Int(DTBBB/256)
2930 DIM DDD As *Double
2931 DDD=calloc(SizeOf(Double)*(DTBBB+300))
2932 DDD[0]=0.1
2933 DDD[1]=0.2
'2940 DDD=calloc(DTBBB+300)
2950 OPEN "DAT3-14.FRK" As #1 'この辺から不安!!!!!
2960 FIELD #1,128
'2960 FIELD #1,128 AS X$
'2961 FIELD #1,128 AS Y$
2970 FOR I=1 TO LOOPe
2980 '
2990 GET #1,STBBB+I,X$
2991 GET #1,STBBB+I,Y$
3000 FOR N=1 TO 128
3010 M=256*(I-1)+N
3020 DDD(M)=Asc(Mid$(X$,N,1))
3030 NEXT
3040 FOR N=1 TO 128
3050 M=256*(I-1)+N+128
3060 DDD(M)=Asc(Mid$(Y$,N,1)) 'この辺まで不安!!!!!
3070 NEXT
3080 '
3090 NEXT
3100 CLOSE #1
3110 '
2930 DIM GBB# As Double
2930 DIM GBB As Double
3111 OPEN "DAT-GBB.DAT" FOR OUTPUT As #2
3112 '
3113 W=0
3120 P=4
3130 FOR N=1 TO DTBBB STEP P
3140 X1=DDD(N)
3141 X2=DDD(N+1)
3150 X3=DDD(N+2)
3151 X4=DDD(N+3)
3160 SIGN=(-1)^((X1 and 128)/128)
3170 EXPO1=((X1 AND 127)*2+(X2 AND 128)/128)-127
3180 EXPO#=2^EXPO1
3190 FRAC#=(X2 OR 128)/128+X3/(128*256)+X4/(128*256*256)
3200 GBB#=SIGN*EXPO#*FRAC#
3210 IF Abs(GBB#)<=1E-38 THEN GBB=0 :GOTO 3240
3220 GBB=SCLBB*GBB#/10^6
3230 '
3240 '
3250 PRINT #2 ,W,GBB
3251 W=W+0.25
3260 NEXT N
3270 CLOSE #2
3280 free(DD)
3281 free(DD#)
3282 free(DDD)
3290 END
[/code][/hide]