Indeks | English version |
Kalkulator w rzeczywistości oblicza pseudolosowe liczby naturalne w przedziale 0-32767. W celu otrzymania liczby rzeczywistej w przedziale 0-0.9999... wynik jest później mnożony mnożony przez 0.30517578125E-4 (=1/32768).
Poniższy program w języku BASIC oblicza liczby pseudolosowe używając tego samego algorytmu jak wbudowana funkcja RAN#. Dla porównania wyświetlane są również wartości generowane przez RAN#.
10 S=32768*RAN# 20 S=12869*S+6925 30 S=S-32768*INT(S/32768) 40 PRINT S;32768*RAN# 50 GOTO 20
Poniższy program w języku BASIC przedstawia algorytm używany w mikrokomputerze MK-85. Oblicza pierwiastek kwadratowy dla liczb w przedziale 1 do 99.9999... z dokładnością R cyfr.
Oryginalna procedura używa tylko prostych i wydajnych operacji matematycznych: przesunięć, dodawania/odejmowania, porównywania i przeglądania tablic. W języku BASIC trzeba było zastąpić operację przesunięcia za pomocą mnożenia przez potęgi 10.
Algorytmy działania tej i następnych funkcji są szczegółowo opisane w artykule J.E. Meggitt, Pseudo Division and Pseudo Multiplication processes, IBM Journal, Res & Dev, April 1962.
5 R=7 10 INPUT "Argument=",A 20 IF A<1 THEN 40 30 IF A<100 THEN 50 40 PRINT "Poza zakresem!":GOTO 10 50 B=1:Q=0:J=0 200 IF J>=R THEN 600 210 IF A<B THEN 400 300 A=A-B 310 GOSUB 800 320 B=B+2*D 330 Q=Q+1 340 GOTO 200 400 A=10*A 410 B=B-D 420 Q=10*Q 430 J=J+1 440 GOSUB 800 450 B=B+D 460 GOTO 200 600 PRINT "SQR=";Q/10^R 610 GOTO 10 800 D=10^-J 810 RETURN
Poniższy program w języku BASIC oblicza EXP(x) dla liczb w zakresie 0 do LN(10) z dokładnością R cyfr. Używa takiego samego algorytmu jak oryginalny kod w pamięci ROM mikrokomputera MK-85.
10 R=7:IF R>6; DEFM(R-1) 20 FOR J=0 TO R-1 30 T(J)=LN(1+10^-J)*10^J 40 NEXT J 100 INPUT "Argument=",A 110 IF A<0 THEN 130 120 IF A<LN(10) THEN 140 130 PRINT "Poza zakresem!":GOTO 100 140 Q=0:J=0 150 GOTO 500 200 IF J>=R THEN 600 210 IF A<B THEN 400 300 A=A-B 310 Q=Q+1 320 GOTO 200 400 A=A*10 410 Q=Q*10 420 J=J+1 500 B=T(J) 510 GOTO 200 600 A=0:B=10^R 700 IF FRAC(Q/10)<>0 THEN 800 710 IF Q<>0 THEN 900 720 GOTO 1000 800 M=INT(B/10^J) 810 A=A+B 820 B=B+M 830 Q=Q-1 840 GOTO 700 900 A=INT(A/10) 910 Q=INT(Q/10) 920 J=J-1 930 GOTO 700 1000 PRINT "EXP=";1+A/10^(R+J) 1010 GOTO 100
Poniższy program w języku BASIC oblicza LN(x) dla liczb w zakresie 1 do 10 z dokładnością R cyfr. Używa takiego samego algorytmu jak oryginalny kod w pamięci ROM mikrokomputera MK-85.
10 R=7:IF R>6; DEFM(R-1) 20 FOR J=0 TO R-1 30 T(J)=LN(1+10^-J)*10^J 40 NEXT J 100 INPUT "Argument=",A 110 IF A<1 THEN 130 120 IF A<10 THEN 140 130 PRINT "Poza zakresem!":GOTO 100 140 Q=0:B=1:J=0 150 A=A-1 200 IF J>=R THEN 500 210 IF A<B THEN 400 300 M=B*10^-J 310 A=A-B 320 B=B+M 330 Q=Q+1 340 GOTO 200 400 A=A*10 410 Q=Q*10 420 J=J+1 430 GOTO 200 500 A=0 510 GOTO 900 600 IF 10*FRAC(Q/10)<>0 THEN 700 610 IF Q<>0 THEN 800 620 GOTO 1000 700 A=A+B 710 Q=Q-1 720 GOTO 600 800 A=INT(A/10) 810 Q=INT(Q/10) 820 J=J-1 900 B=T(J) 910 GOTO 600 1000 PRINT "LN=";A*10^-J 1010 GOTO 100
Poniższy program w języku BASIC oblicza ATN(x) dla liczb w zakresie 0 do 1 z dokładnością R cyfr. Używa takiego samego algorytmu jak oryginalny kod w pamięci ROM mikrokomputera MK-85.
10 R=7:IF R>6; DEFM(R-1) 20 FOR J=0 TO R-1 30 T(J)=ATN(10^-J)*10^J 40 NEXT J 100 INPUT "Argument=",A 110 IF A<0 THEN 130 120 IF A<1 THEN 140 130 PRINT "Poza zakresem!":GOTO 100 140 Q=0:B=1:J=0 200 IF J>=R THEN 500 210 IF A<B THEN 400 300 M=A*10^(-2*J) 310 A=A-B 320 B=B+M 330 Q=Q+1 340 GOTO 200 400 A=A*10 410 Q=Q*10 420 J=J+1 430 GOTO 200 500 A=0 510 GOTO 900 600 IF 10*FRAC(Q/10)<>0 THEN 700 610 IF Q<>0 THEN 800 620 GOTO 1000 700 A=A+B 710 Q=Q-1 720 GOTO 600 800 A=INT(A/10) 810 Q=INT(Q/10) 820 J=J-1 900 B=T(J) 910 GOTO 600 1000 PRINT "ATN=";A*10^-J 1010 GOTO 100
Poniższy program w języku BASIC oblicza TAN(x) dla liczb w zakresie 0 do PI/2 radianów z dokładnością R cyfr. Używa takiego samego algorytmu jak oryginalny kod w pamięci ROM mikrokomputera MK-85.
10 MODE 5:R=7:IF R>6; DEFM(R-1) 20 FOR J=0 TO R-1 30 T(J)=ATN(10^-J)*10^J 40 NEXT J 100 INPUT "Argument=",A 110 IF A<0 THEN 130 120 IF A<PI/2 THEN 140 130 PRINT "Poza zakresem!":GOTO 100 140 Q=0:J=0 150 GOTO 500 200 IF J>=R THEN 600 210 IF A<B THEN 400 300 A=A-B 310 Q=Q+1 320 GOTO 200 400 A=A*10 410 Q=Q*10 420 J=J+1 500 B=T(J) 510 GOTO 200 600 A=0:B=10^R 700 IF 10*FRAC(Q/10)<>0 THEN 800 710 IF Q<>0 THEN 900 720 GOTO 1000 800 M=INT(A*10^(-2*J)) 810 A=A+B 820 B=B-M 830 Q=Q-1 840 GOTO 700 900 A=INT(A/10) 910 Q=INT(Q/10) 920 J=J-1 930 GOTO 700 1000 PRINT "TAN=";A/B/10^J 1010 GOTO 100