Post Reply 
Dismal Arithmetic & 3 Progs for 49G & Others
05-11-2015, 04:16 PM
Post: #21
RE: Dismal Arithmetic & 2 Progs for 49G, the Prime, 48S & 32S & TI & C...
Now for something in BASIC: the Casio fx-702p "programmable calculator" (really more of a pocket computer). This is the slowest one yet, at 1:44 to do 435,821 * 2,949,229, but it DOES yield the full-precision result, 244,585,835,821, unlike the Casio graphing calculator. It displays 2.445858358E11, but you can pry the other digits out by executing F-2.445E11.

Just run it, tell it if you want to "A"dd, or "M"ultiply, then enter your two inputs.

Code:
1 INP "(A)DD (M)ULT:",$
2 $=MID(1,1)
10 IF $="A":INP "X",A,"Y",B:GSB 300:PRT S
20 IF $="M";INP "X",X,"Y",Y:GSB 400:PRT F
30 END

100 IF N=0;L=0:RET
110 L=INT LOG N+1:RET

200 R=FRAC (INT (N/10^(D-1))/10)*10:RET

300 N=A:GSB 100:C=L
310 N=B:GSB 100:IF L>C;C=L
320 S=0
330 FOR I=1 TO C
340 N=A:D=I:GSB 200:T=R
350 N=B:GSB 200:IF R>T;T=R
360 S=S+T*10^(I-1)
370 NEXT I
380 RET

400 N=X:GSB 100:Z=L
410 N=Y:GSB 100:J=L
420 F=0
430 FOR J=J TO 1 STEP -1
440 N=Y:D=J:GSB 200:M=R
450 P=0
460 FOR K=1 TO Z
470 U=M
480 N=X:D=K:GSB 200
490 IF R<U;U=R
500 P=P+U*10^(K-1)
510 NEXT K
520 A=P:B=10*F:GSB 300:F=S
530 NEXT J
540 PRT F

Routines
1 Interactive Menu
100 Number Length
200 Get Digit
300 Add
400 Multiply

Variables
N - Number Length input
L - Number Length result

N - Get Digit input
D - Get Digit digit number
R - Get Digit result

A - Addend 1
B - Addend 2
C - Add loop limit (addend max length)
I - Add loop counter
S - Sum
T - Addition scratch register

X - Factor 1
Y - Factor 2
Z - Factor 1 length
J - Factor 2 length/outer loop counter
K - Inner loop counter (factor 1)
P - Product
F - Sum of products
M - Factor 2 current digit
U - Multiply scratch register (digit comparison)

Notes: I think this is one of Casio's first BASIC machines, so it's got a few odd limitations.

A number of keywords are abbreviated from what's typically used (PRT, INP, GSB, RET, etc).

Variable naming and availability are limited much like the Sharp pocket computers. Single-character names, and some basic array functionality. Variables can hold numbers or strings (e.g. A vs. A$), but are limited to 7-character strings. The dedicated string variable, named simply $, can hold 30 characters.

There are two forms of the IF statement. This will do a GOTO if true:
IF X>3 THEN 90
And this will skip the rest of the line if false:
IF X>3;F=7:GSB 300
Note that you have to terminate the IF with a semicolon, whereas you use a colon to separate the rest of the statements.

The IF statement can't evaluate any compound expressions; there's no AND or OR functions! But you can string conditions together into a simple AND chain like this:
IF X>3;IF J<10;GSB 500:RET
Anything more complicated, and you're going to be doing GOTO stunts.

There's no DATA or READ statements. Not an issue here, but it was an annoying discovery when I was porting the usual prime factors program.

It's sloooow. It took almost 5 times as long as running the same algorithm on the Casio fx-8500g.

Despite all that, I like it, largely because it has slots for 10 independent programs, like most Casios do. The Sharp and TI offerings typically only provide a single program space.
Visit this user's website Find all posts by this user
Quote this message in a reply
Post Reply 


Messages In This Thread
RE: Dismal Arithmetic & 2 Progs for 49G, the Prime, 48S & 32S & TI & C... - Dave Britten - 05-11-2015 04:16 PM



User(s) browsing this thread: 1 Guest(s)