サンプルプログラムのFRACTAL/MANDELBL.BASを2進モードで実行すると桁あふれのエラーを生成しません。
次に示すようにPRINT文を挿入すると正しく動作します(350行)。
100 ! マンデルブローのλ-map
110 ! f(z)=λz(1-z) の反復が有界となる複素数λの集合
120 ! λ=u+iv, z=x+y ,f(z)=x1+iy1 とおくと,
130 ! x1=ux0-vy0, y1=vx0-uy0, ここで x0=x(1-x)+y^2, y0=y(1-2x)
140 ! となることを利用して複素数の演算を行う。
150 OPTION ARITHMETIC native
160 LET left = -2
170 LET right = 4
180 LET h = (right - left) ! height
190 SET WINDOW left, right,-h/2,h/2
200 ASK PIXEL SIZE(left,-h;right,h) px,py
210 LET px=px-1
220 LET py=py-1
230 DRAW grid
240 SET POINT STYLE 1
250 FOR u= left TO right step (right-left)/px
260 FOR v = 0 to h/2 step h/py
270 LET x = 0.5
280 LET y = 0
290 WHEN EXCEPTION IN
300 FOR n = 1 TO 250
310 LET x0=x*(1-x)+y^2
320 LET y0=y*(1-2*x)
330 LET x =u*x0 - v*y0
340 LET y =v*x0 + u*y0
350 PRINT n,x,y
360 NEXT n
370 PLOT POINTS: u,v
380 PLOT POINTS: u,-v
390 USE
400 END WHEN
410 NEXT v
420 NEXT u
430 END
サンプルプログラムのFRACTAL/CAYLEY.BASを2進モードで実行するとBASICシステムを異常終了させます。
次に示すようにIF文で0除算を回避すると問題なく実行できるので、0除算の例外状態処理に問題がありそうです(350行)。
100 ! Cayleyの問題
110 ! f(z)=z^3-1 として,
120 ! Newton法の反復
130 ! z←z-f(z)/f'(z)
140 ! によって1の3乗根のうちのいずれに収束するか?
150 OPTION ARITHMETIC native
160 LET left=-4
170 LET right=4
180 LET h=(right-left)/2
190 SET WINDOW left,right,-h,h
200 DRAW axes
210 SET POINT STYLE 1
220 FOR px=0 TO PIXELX(right)
230 FOR py=0 TO PIXELY(h)
240 WHEN EXCEPTION IN
250 LET x0=PROBLEMX(px)
260 LET y0=PROBLEMY(py)
270 LET x=x0
280 LET y=y0
290 FOR i=1 to 100 ! 最大繰り返し回数
300 LET a=2*(x^3-3*x*y^2)+1
310 LET b=2*(3*x^2*y-y^3)
320 LET c=3*(x^2-y^2)
330 LET d=6*x*y
340 LET den=c^2+d^2
350 IF den<>0 THEN
360 LET x=(a*c+b*d)/den
370 LET y=(b*c-a*d)/den
380 IF (x-1)^2+y^2<0.0001 THEN ! 収束先によって色分け
390 SET POINT COLOR 3
400 PLOT POINTS : x0, y0
410 EXIT FOR
420 ELSEIF (x+0.5)^2+(y-sqr(3)/2)^2<0.0001 THEN
430 SET POINT COLOR 2
440 PLOT POINTS : x0, y0
450 EXIT FOR
460 ELSEIF (x+0.5)^2+(y+sqr(3)/2)^2<0.0001 THEN
470 SET POINT COLOR 4
480 PLOT POINTS : x0, y0
490 EXIT FOR
500 END IF
510 END IF
520 NEXT i
530 USE
540 END WHEN
550 NEXT py
560 NEXT px
570 END