Jedes Leerzeichen, jede Rem-Zeile, jeder zusätzliche Doppelpunkt verändert bei Microsoft-Basic die Laufzeit.
slenz Das scheint bei IotBASIC nicht anders zu sein und sogar ganz schoen "drastisch"
Ich habe per SET 12,0 den Startindex auf 0 gesetzt und den "alten" Code genommen - dabei aber im Code die REMs dringelassen.
Die Ausfuehrungzeit hat sich von 10.x auf 12.x Sekunden erhoeht
CalcPi mit SET 12,0 und REMs:
Code
100 REM "CALCULATING PI FOR HUNDREDS OF DIGITS"
110 REM "THX TO ROSETTACODE.ORG FOR THE BASE OF THE PROGRAM"
120 REM "SHOULD BE A BENCHMARK FOR THE BASIC INTERPRETER/COMPILER"
130 REM "WRITTEN IN 2023 FOR FORUM.CLASSIC-COMPUTING.DE BY PETER DASSOW"
140 PRINT "Calculating Pi as a BASIC benchmark."
150 PRINT "Enter number of digits (below or equal 1000): ";
155 SET 12, 0 : REM "Set Startindex / OPTION BASE to 0"
160 INPUT S$
170 IF S$ = "" THEN PRINT "Nothing done.": END
180 N = VAL(S$):IF N > 1000 OR N< 1 THEN PRINT "Not a valid number.": GOTO 150
190 REM N DETERMINES ALSO THE ARRAY (ABOUT 3-4 TIMES BIGGER)
200 LN = INT(10 * N / 3) + 16
210 ND = 1
220 REM "DIM STATEMENT COULD HAVE LN AS SIZE PARAMETER, BUT COMPATIBILITY..."
230 DIM A(3350)
240 SM=MILLIS(1)
250 N9 = 0
260 PD = 0: REM "FIRST PRE-DIGIT IS A 0"
270 REM
280 FOR J = 1 TO LN
290 A(J - 1) = 2: REM "START WITH 2S"
300 NEXT J
310 REM
320 FOR J = 1 TO N
330 Q = 0
340 FOR I = LN TO 1 STEP -1: REM "WORK BACKWARDS"
350 X = 10 * A(I - 1) + Q * I
360 A(I - 1) = X - (2 * I - 1) * INT(X / (2 * I - 1)): REM X - INT ( X / Y) * Y
370 Q = INT(X / (2 * I - 1))
380 NEXT I
390 A(0) = Q - 10 * INT(Q / 10)
400 Q = INT(Q / 10)
410 IF Q = 9 THEN N9 = N9 + 1: GOTO 610
420 IF Q <> 10 THEN GOTO 540
430 REM "Q == 10"
440 D = PD + 1: GOSUB 670
450 IF N9 <= 0 THEN GOTO 500
460 FOR K = 1 TO N9
470 D = 0: GOSUB 670
480 NEXT K
490 REM "END IF"
500 PD = 0
510 N9 = 0
520 GOTO 610
530 REM "Q <> 10"
540 D = PD: GOSUB 670
550 PD = Q
560 IF N9 = 0 THEN GOTO 610
570 FOR K = 1 TO N9
580 D = 9: GOSUB 670
590 NEXT K
600 N9 = 0
610 NEXT J
620 C$=STR(PD): Z=LEN(C$)
621 PRINT C$(Z,Z)
630 EM=MILLIS(1)-SM
635 PRINT "It took ";EM/1000;" secs"
640 END
650 REM
660 REM "OUTPUT DIGITS"
670 C$=STR(D): Z=LEN(C$)
671 IF ND=0 THEN PRINT C$(Z,Z);: RETURN
680 IF D=0 THEN RETURN
690 C$=STR(D): Z=LEN(C$)
691 PRINT C$(Z,Z);".";
700 ND = 0
710 RETURN
Alles anzeigen
CalcPi mit SET 12,0 aber ohne REMs:
Code
140 PRINT "Calculating Pi as a BASIC benchmark."
150 PRINT "Enter number of digits (below or equal 1000): ";
155 SET 12, 0
160 INPUT S$
170 IF S$ = "" THEN PRINT "Nothing done.": END
180 N = VAL(S$):IF N > 1000 OR N< 1 THEN PRINT "Not a valid number.": GOTO 150
200 LN = INT(10 * N / 3) + 16
210 ND = 1
230 DIM A(3350)
240 SM=MILLIS(1)
250 N9 = 0
260 PD = 0
280 FOR J = 1 TO LN
290 A(J - 1) = 2
300 NEXT J
320 FOR J = 1 TO N
330 Q = 0
340 FOR I = LN TO 1 STEP -1
350 X = 10 * A(I - 1) + Q * I
360 A(I - 1) = X - (2 * I - 1) * INT(X / (2 * I - 1))
370 Q = INT(X / (2 * I - 1))
380 NEXT I
390 A(0) = Q - 10 * INT(Q / 10)
400 Q = INT(Q / 10)
410 IF Q = 9 THEN N9 = N9 + 1: GOTO 610
420 IF Q <> 10 THEN GOTO 540
440 D = PD + 1: GOSUB 670
450 IF N9 <= 0 THEN GOTO 500
460 FOR K = 1 TO N9
470 D = 0: GOSUB 670
480 NEXT K
500 PD = 0
510 N9 = 0
520 GOTO 610
540 D = PD: GOSUB 670
550 PD = Q
560 IF N9 = 0 THEN GOTO 610
570 FOR K = 1 TO N9
580 D = 9: GOSUB 670
590 NEXT K
600 N9 = 0
610 NEXT J
620 C$=STR(PD): Z=LEN(C$)
621 PRINT C$(Z,Z)
630 EM=MILLIS(1)-SM
635 PRINT "It took ";EM/1000;" secs"
640 END
670 C$=STR(D): Z=LEN(C$)
671 IF ND=0 THEN PRINT C$(Z,Z);: RETURN
680 IF D=0 THEN RETURN
690 C$=STR(D): Z=LEN(C$)
691 PRINT C$(Z,Z);".";
700 ND = 0
710 RETURN
Alles anzeigen