• [0]
  • Apple Silicon (M1プロセッサ)での動作

  • 投稿者:管理人
  • 投稿日:2021年 1月22日(金)09時27分9秒
 
Apple Silicon (M1プロセッサ)搭載MACでの動作を確認しています。
M1 Macでの動作に疑義があるとき書き込みをお願いします。

  • [1]
  • (1+1/n)^n

  • 投稿者:SHIRAISHI Kazuo
  • 投稿日:2021年 1月22日(金)09時30分2秒
 
INTEL PCで(1+1/n)^nを計算
LET e=exp(1)
FOR i=1 TO 16
   LET n=10^i
   LET x=(1+1/n)^n
   PRINT n,x,x-e
NEXT i
END
実行結果
10                      2.5937424601           -.12453936835905
100                     2.70481382942153       -.01346799903752
1000                    2.71692393223589       -.00135789622316
10000                   2.71814592682522       -.00013590163383
100000                  2.71826823717449       -.00001359128456
1000000                 2.71828046931938       -.00000135913967
10000000                2.71828169254497       -.00000013591408
100000000               2.71828181486764       -.00000001359141
1000000000              2.7182818270999        -.00000000135915
10000000000             2.71828182832313       -.00000000013592
100000000000            2.71828182844545       -.0000000000136
1000000000000           2.71828182845769       -.00000000000136
10000000000000          2.71828182845891       -.00000000000014
100000000000000         2.71828182845903       -.00000000000002
1.E15                   2.71828182845904       -.00000000000001
1.E16                   2.71828182845905        0


  • [2]
  • Apple Silicon

  • 投稿者:SHIRAISHI Kazuo
  • 投稿日:2021年 1月22日(金)09時33分28秒
 
M1 Macでの実行結果
10                      2.5937424601           -.12453936835905
100                     2.70481382942153       -.01346799903752
1000                    2.71692393223589       -.00135789622316
10000                   2.71814592682523       -.00013590163382
100000                  2.7182682371745        -.00001359128455
1000000                 2.71828046931944       -.00000135913961
10000000                2.71828169254356       -.00000013591549
100000000               2.71828181488096       -.00000001357809
1000000000              2.7182818271427        -.00000000131635
10000000000             2.71828182925008        .00000000079103
100000000000            2.71828181758374       -.00000001087531
1000000000000           2.71828181759597       -.00000001086308
10000000000000          2.71828122816384       -.00000060029521
100000000000000         2.71829006967759        .00000824121854
1.E15                   2.71817218519387       -.00010964326518
1.E16                   2.71728821450559       -.00099361395346
                                                                  

  • [3]
  • FYL2XP1

  • 投稿者:SHIRAISHI Kazuo
  • 投稿日:2021年 1月22日(金)09時39分40秒
 
Intel FPUのFYL2XP1命令のエミュレーションが正確にできていないのだろうと思います。
FYL2XP1は,x≒0のときにLOG2(1+x)*yを求める命令です。


  • [4]
  • FRACTAL/MANDELBL.BAS

  • 投稿者:SHIRAISHI Kazuo
  • 投稿日:2021年 1月23日(土)14時11分50秒
 
サンプルプログラムの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                                            

  • [5]
  • 2進モード時の0除算

  • 投稿者:SHIRAISHI Kazuo
  • 投稿日:2021年 1月23日(土)14時24分10秒
 
サンプルプログラムの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

  • [6]
  • BASIC0811Ja_x86_64.dmg

  • 投稿者:SHIRAISHI Kazuo
  • 投稿日:2021年 1月24日(日)10時49分39秒
 
FPU割込みを使用しないVer. 0.8.1.1のx86_64版を作成しました。
https://ja.osdn.net/projects/decimalbasic/releases/69286
この版だと例外がうまく処理されないことに起因する不具合は出ないようです。


  • [7]
  • Ver 0.8.1.2

  • 投稿者:SHIRAISHI Kazuo
  • 投稿日:2021年 1月26日(火)10時25分44秒
 
FYL2XP1を代替ルーチンに置き換えました。

LET e=exp(1)
FOR i=1 TO 16
   LET n=10^i
   LET x=(1+1/n)^n
   PRINT n,x,x-e
NEXT i
END
10                      2.5937424601           -.12453936835905
100                     2.7048138240566        -.01346800440245
1000                    2.71692393223535       -.0013578962237
10000                   2.71814592682522       -.00013590163383
100000                  2.71826823717449       -.00001359128456
1000000                 2.71828046931938       -.00000135913967
10000000                2.71828169254497       -.00000013591408
100000000               2.71828181486764       -.00000001359141
1000000000              2.7182818270999        -.00000000135915
10000000000             2.71828182832313       -.00000000013592
100000000000            2.71828182844545       -.0000000000136
1000000000000           2.71828182845769       -.00000000000136
10000000000000          2.71828182845891       -.00000000000014
100000000000000         2.71828182845903       -.00000000000002
1.E15                   2.71828182845904       -.00000000000001
1.E16                   2.71828182845905        0


 戻る