Para realizar una comparación de rendimiento de los "Ordenadores Personales" BASIC, hemos establecido tres pruebas. Estas pruebas deben ser sencillas, para poder ser ejecutadas en todos los modelos, y servir pues de referencia. Lógicamente es sólo una referencia para ver la evolución del rendimiento a través del tiempo, ya que no tendría ningún sentido comparar un modelo 1989, con uno de 1984, debido a la enorme evolución de la tecnología en esos 5 años. Sí servirá, sin embargo, para comparar modelos de diferentes marcas, de un mismo año. Las pruebas son:

Prueba 1 y 2. "Índice de Rendimiento de Calculadoras".

La primera es una prueba estándar de Internet llamada "Índice de rendimiento de calculadoras" (Calculator Performance Index), cuya descripción original se puede encontrar aquí. Se utiliza este test, por estar bastant difundido en Internet.

El programa de esta prueba desarrolla en el bucle interno 10x(1 asignación, 5 sumas y restas, 2 multiplicaciones y divisiones, y 1 comparación)=90 más 2 raíces cuadradas, un seno,  un logaritmo, una resta, una asignación y una comparación en el bucle externo. En total, 97 operaciones. Las operaciones aritméticas adicionales necesarias para el control de bucles son desechadas.

El tiempo de ejecución T se mide, si es inferior a 5 segundos, se añade un ciclo total para incrementar la precisión de la medición. Esto será necesario en las calculadoras más veloces.
  • El resultado final de los cálculos mostrados en pantalla debe ser  0.264577, si el sistema de grados es DEG y log() proporciona el logaritmo en base 10.
  • Si log() es base e, el resultado será 0.325915.
  • Si log() es base e y el sistema de grados es RAD, el resultado será 0.880982.
Si su programa no produce ninguno de estos resultados, revíselo.

El "Índice de Rendimiento" es la representación de "Operaciones por segundo", entendiendo operación por las 97 descritas anteriormente, siendo una mezcla de operaciones de dificultad muy variable (no es lo mismo una suma, que una raiz cuadrada, que un logaritmo), pero bastante representativa. Por último comentar que la primera vez que se desarrolló este test, su creador cometió el error de computar 34 operaciones en cada ciclo, en vez de las 97 reales descritas. Para solventar este error, reflejaremos el índice en dos columnas 1 y 2. Así si la columna 1 está marcada como 11,6 y la 2 como 33,3, significa que según la medición errónea original, la máquina medida ejecuta 11,6 operaciones por segundo, y que según la real, ejecuta 33,3. En la página original listada arriba se describe el error, pero se sigue mostrando el primer valor (en cualquier caso el 2º valor es el 1º x 97 / 34, corrigiéndose de esta manera el error).
Si un valor está antecedido de un asterísco, (ej. *11,6), es que la medición es propia, es decir, hemos cargado el programa y hemos medido su tiempo de ejecución con una calculadora nuestra.

Así, el índice sería:
Primer índice= (34 Operaciones x número de bucles N que pongamos en el programa) / (segundos que ha tardado en ejecutar el programa)
Segundo índice= (97 Operaciones x número de bucles N que pongamos en el programa) / (segundos que ha tardado en ejecutar el programa)

Ejémplo: Una Casio FX-730P tarda en ejecutar el programa con 10 bucles N=10, (29,13 segundos). El índice 1 será 11,6 y el 2 33,3. (En la página del creador del test, da 12, que coincide con nuestro primer índice 11,6; redondeado).

Intentaremos calcular el índice para cada uno de los lenguajes que proporcione la calculadora. Si dispone de BASIC y C, como por ejemplo la Casio VX-4 y la SHARP PC G850V, hallaremos un índice para BASIC y otro para C. Eso nos dará también una idea de la diferencia potencia que puede proporcionar cada lenguaje en la misma máquina.

El programa de índice de rendimiento es:

Genérico para todas las Casio y Sharp:
--------------------------
10 N=10
20 L=10
30 X=L
40 X=X+1
50 X=X-4.567E-4
60 X=X+70
70 X=X-69
80 X=X*7
90 X=X/11
100 L=L-1
110 IF L<>0 THEN 30
120 X=LOG(X)
130 X=SIN(X)
140 X=SQR(X)
150 X=SQR(X)
160 N=N-1
170 IF N<>0 THEN 20
180 PRINT X
190 BEEP: BEEP

Eliminar línea 190 para calculadoras sin BEEP.
Para Casio FX-702P y FX-801P cambiar PRINT por PRT.
Para PSION II CM, XP, XP/LA, LZ, LZ64:
--------------------------
PROC INDIRTO:
LOCAL N%,L%,X
N%=30
DOS::
L%=10
UNO::
X=L%
X=X+1
X=X-4.567E-4
X=X+70
X=X-69
X=X*7
X=X/11
L%=L%-1
IF L%<>0
GOTO UNO::
ENDIF
X=LN(X)
X=SIN(X)
X=SQR(X)
X=SQR(X)
N%=N%-1
IF N%<>0
GOTO DOS::
ENDIF
PRINT X :BEEP 500,100 :GET
ENDP
Para todas las PSION 3 y 5:
(aprovechamos que nos puede calcular incluso el índice gracias al reloj incorporado, sin interferir en los cálculos)
--------------------------
PROC INDIRTO:
LOCAL N%,L%,X,T1&,T2&
FONT 12,0
T1&=DATETOSECS(YEAR,MONTH,DAY,HOUR,MINUTE,SECOND)
N%=100
DOS::
L%=10 UNO:: X=L% X=X+1 X=X-4.56E-4 X=X+70 X=X-69 X=X*7 X=X/11 L%=L%-1 IF L%<>0 GOTO UNO ENDIF X=LN(X) X=SIN(X) X=SQR(X) X=SQR(X) N%=N%-1 IF N%<>0 GOTO DOS ENDIF T2&=DATETOSECS(YEAR,MONTH,DAY,HOUR,MINUTE,SECOND) PRINT X BEEP 5,300 PRINT "Tiempo empleado:";T2&-T1&;" segundos" PRINT "Primer indice:";34*100/(T2&-T1&) PRINT "Segundo indice:";34*100/(T2&-T1&)*97/34 GET ENDP

Prueba 3. Contador simple.

La segunda es una sencilla prueba que cuenta del 1 al 10.000, escribiendo el número en el mismo lugar. Normalmente en la parte izquierda de la pantalla en las pantallas de una sóla línea, o arriba a la izquierda en las de más de una. El programa debe tener las siguientes características:
  • Es indispensable que el conteo sea visible en pantalla, y en el mismo lugar.
  • Se podrá utilizar cualquier método de programación dentro de un lenguaje. Obviamente se deberá anotar el más rápido. Los bucles FOR suelen ser más eficaces que los IF-GOTO; aunque hay máquinas que no disponen de FOR. Probar con DO-UNTIL, WHILE-WEND, etc. (Tuvimos que cambiar todos los índices de esta prueba de nuestras calculadoras Casio al comprobar la mayor eficacia de los bucles FOR).
  • Reflejar en el resultado el lenguaje de programación. Evidentemente será más efica el código máquina, que el C que a su vez el BASIC. Es interesante reflejar todos los lenguajes, como referencia.
  • Se podrá utilizar el tipo numérico más eficaz. Los números enteros (INT) son más rápidos de usar; aunque no todas las máquinas disponen de ellos, como por ejemplo las Casio, que sólo disponen de un tipo único de COMA FLOTANTE.
  • Igualmente, en las máquinas que dispongan de diferentes tamaños de letra, utilizar el más eficaz.
  • También es interesante anotar el resultado para diferentes tipos de BASIC en aquellas máquinas en las que se puedan ejecutar más de una versión. Por ejemplo, en las PSION 5 y REVO se puede ejecutar además de OPL, el sistema operativo MSDOS, donde se pueden hacer correr varias versiones de BASIC para ese SO. En la TI-83+ y TI-84+ se pueden ejecutar, además del TI BASIC, el BBC BASIC, o el compilador de BASIC AXE, entre otros.
  • Aunque varias máquinas puedan ejecutar la misma versión de BASIC o OPL, conviene traducir o compilar el código fuente en cada una en la que se vaya a ejecutar el test, ya que normalmente un cóodigo compilado en otra versión suele ir más lento.No obstante, aquí queda a la libertad del analista, la anotación del resultado más eficaz.

A modo de ejemplo, se muestran los siguientes programas:

Para PB-80, 100, 110, etc:
--------------------------
10 FOR A=1 TO 10000: PRINT CSR 0;A;:NEXT A
--------------------------
10 A=1
20 PRINT CSR 0;A;
30 A=A+1
40 IF A<10001 THEN 20

En Calculadoras con BEEP (PB-110), añadir una línea 50 BEEP:BEEP para que avise al acabar y medir tiempo.
Casio FX-702P y FX-801P cambiar línea 20 por "20 PRT CSR 0;A;"
Para FX-850P, 880, VX-4, etc:
--------------------------
10 CLS: A=1
20 LOCATE 0,0:PRINT A;
30 A=A+1
40 IF A<10001 THEN 20
50 BEEP:BEEP
Para PSION II CM, XP, XP/LA, LZ, LZ64:
--------------------------
LOCAL A%
A%=1
UNO::
AT 1,1: PRINT A%
A%=A%+1
IF A%<10001
GOTO UNO::
ENDIF
BEEP 500,100
Genérico para las Sharp:
--------------------------
10 WAIT 0: CLS: A=1
20 PRINT A
30 A=A+1
40 IF A<10001 THEN 20

En la PC-1500 se puede añadir:
50 BEEP 5,50
ASM para Sharp PC-G850V:
--------------------------
10 ORG 100H
11 LD HL,1
15 LD (NUMERO),HL
20INI: LD HL,(NUMERO)
30 LD DE,PP
40 CALL NM2DEC
50 LD B,5
60 LD DE,0101H
70 LD HL,PP
80 CALL 0BFF1H
90 LD DE,(NUMERO)
100 INC DE
105 LD(NUMERO),DE
110 LD HL,10000
120 SBC HL,DE
280 JP NZ, INI
290 RET
300PP:DB 0,0,0,0,0
310NUMERO:DW 0001H
-------------
1000NM2DEC: LD BC,-10000
1010 CAL NUM1
1015 LD BC,-1000
1018 CALL NUM1
1020 LD BC,-100
1030 CALL NUM1
1040 LD C,-10
1050 CALL NUM1
1060 LD C,B
1070NUM1: LD A,-1
1080NUM2: INC A
1090 ADD HL,BC
1100 JR C, NUM2
1120 SBC HL,BC
1125 ADD A,48
1130 LD (DE),A
1140 INC DE
1150 RET

                                          
Produciendo un programa así:





Prueba 4. Prueba de movimiento de caracteres gráfico.

La tercera es un programa que presenta inicialmente dos caracteres gráficos a ambos lados de la pantalla, y se mueven de lado a lado de la pantalla cruzándose 300 veces.
A modo de ejemplo, se muestran los siguientes programas:

Para PB-80, 100, 110, etc:
--------------------------
10 A=0:B=1:N=1
15 PRINT
20 PRINT CSR A;"\DI";
25 PRINT CSR 11-A;"\#";
30 A=A+B
35 IF A=11 THEN B=-B
36 IF A=0 THEN B=-B:N=N+1
40 IF N<11 THEN 15

En PB-110 se puede añadir una línea 50 BEEP:BEEP para que avise al acabar y podamos medir el tiempo.
Para Series FX-850P, VX-4, etc:
--------------------------
10 A=0:B=1:N=1
15 CLS
20 LOCATE A,0:PRINT CHR$(234);
25 LOCATE 11-A,0:PRINT CHR$(135);
30 A=A+B
35 IF A=11 THEN B=-B
36 IF A=0 THEN B=-B:N=N+1
40 IF N<11 THEN 15
50 BEEP:BEEP
Para PSION II:
--------------------------
LOCAL A%,B%,N%
A%=1 :B%=1 :N%=1
DO
CLS
AT A%,1
PRINT CHR$(250)
AT 13-A%,1
PRINT CHR$(255)
PAUSE 2
A%=A%+B%
IF A%=12
B%=-B%
ENDIF
IF A%=1
B%=-B%
N%=N%+1
ENDIF
UNTIL N%=101
BEEP 500,100 :GET
Produciendo un programa así:




Otros tests no desarrollados en esta página.

A continuación mostramos otros test considerados interesantes que aún no hemos desarrollado en este sitio. Estos test no tienen por qué reflejar el rendimiento de la calculadora, pudiendo buscar a través de su ejecución datos o características importantes de la máquina.

Test "Forense".
El sitio original está localizado aquí. Ésta es una prueba muy rápida, ya que simplemente consiste en realizar el siguiente cálculo ASN(ACS(ATN(TAN(COS(SIN(9)))))).
La prueba, según su creador, NO TRATA de valorar la precisión, sino de determinar a través de la comparación de resultados, si dos máquinas utilizan la misma tecnología. El resultado se emplea fundamentalmente cuando no se puede desmontar y despiezar las calculadoras para:
  • Intuir si una máquina utiliza los mismos cirucuitos integrados que otra.
  • Intuir si una máquina es copia de otra.
  • Comprobar si un modelo posterior de una misma marca, sigue empleando los mismos circuitos, realizando simples mejoras de la ROM.
  • Si una calculadora de una segunda marca no muy conocida, ha sido desarrollada por un primer fabricante.
Aquí se puede encontrar una extensa tabla recopilatoria de resultados del test forense por modelos de calculadoras, y aquí por resultados, aunque como de ha indicado, este test no pretende medir la precisión.

Test rápido de precisión.
Localizado en este foro, nos parece muy interesante, porque prueba de manera muy rápida la pérdida de precisión de una máquina.

Consiste en teclear 1.0000001 y elevar consecutivamente el resultado 27 veces al cuadrado.
O dicho de otra manera, realizar el siguiente cálculo: \((((((((((((((((((((((((((((1.0000001^2)^2)^2)^2)^2)^2)^2)^2)^2)^2)^2)^2)^2)^2)^2)^2)^2)^2)^2)^2)^2)^2)^2)^2)^2)^2)^2 \).

El resultado, realizado en un PC con un programa de alta precisión al tratar decenas de decimales es: 674530.470741084559382689178029746812844444143410342031742377327839017761756835646924185036948314117161449392236580649 4878235789112137118508266884595666140433881253783364963877882316561013126246700504661941463053373499769954564238438193 0207370825089291776040311503057925709194662515090084795006371908000146482011431309349872840804148845498173359127903194 1696561625036530446399539623519795473743965573225426379607708298301765169283525997445575898149918290658...

Lo bueno de este test, es que una máquina para hacer los cálculos necesita ir redondeando en cada operación parcial, y dependiendo de la precisión de ese redondeo, que en este caso de produce 27 veces, dará un número más o menos cercano a lo que vamos a considerar como Valor Referencia: "674530.470741".

Si no tiene buena precisión, afectará incluso a los enteros. La Casio FX-9860GII (2009), que es una de las calculadoras más avanzadas del mercado, arroja un resultado de "674529.1121", por detrás del PSION Workabout MX, que 11 años antes daba un resultado muy cercano al Valor Referencia "674530.475521". Obsérvese también, como con la misma calculadora FX-9860GII con otra versión más potente de BASIC, la C.BASIC, el error es mucho menor, ya que para los números reales emplea una doble precisión que maneja números en el rango de \(±9.88131291682493 x 10^{-323} a ±1.7976931348623151 x 10^{-323}\). Curiosamente da el mismo resultado, y consecuentemente la misma preción que la PSION (¿sus BASIC fueron desarrollados con el mismo C?).

A continuación mostramos una tabla con máquinas significativas de diferentes fabricantes, con el año de salida al mercado para que pueda tenerse en cuenta la tecnología disponible en ese momento.
MáquinaResultado% errorMáquinaResultado% error
Casio FX-9860GII(2009)674529.1121\(2,01 x 10^{-4}\)Casio FX-9860GII con C.BASIC674530.4755\(7,11 x 10^{-7}\)
Sharp PC-G850V(2001)674494.0561\(5,32 x 10^{-3}\)TI-83 plus(1999)674529.4131\(1,56 x 10^{-4}\)
PSION Workabout MX(1998)674530.475521\(7,11 x 10^{-7}\)Casio FX-3650P(2002)674513.013483\(2,58 x 10^{-3}\)
Casio PB-100(1982)674494.0561\(5,32 x 10^{-3}\)HP 39gs(2006)674514.86877\(2,31 x 10^{-3}\)
Casio FC-200(1988)674470.0572\(8,95 x 10^{-3}\)Psion Revo(1999)674530.475521\(7,11 x 10^{-7}\)
TI-80(1995)674530.3180\(2,26 x 10^{-5}\)TI-92(1996)674529.41305\(1,56 x 10^{-4}\)
TI-82STATS(2004)674529.41305\(1,56 x 10^{-4}\)Casio FX-4000P(1985)674494.0561\(5,32 x 10^{-3}\)
TI-nSpire(2007)674529.41305\(1,56 x 10^{-4}\)Sharp PC-1211(1980)674494.0561\(5,32 x 10^{-3}\)
Amstrad NC100(1992)685090.596\(1,56\)Tandy M-200(1984)674529.41305\(1,56 x 10^{-4}\)
Casio PB-110(1983)674494.0561\(5,32 x 10^{-3}\)Sharp PC-1500(1981)674494.0561\(5,32 x 10^{-3}\)
Casio Classpad 300(2003)674529.1153\(2,00 x 10^{-4}\)Sharp EL-9300(1992)674522.826\(1,13 x 10^{-3}\)
Sharp EL-6450(1999)674523.3747\(1,05 x 10^{-3}\)TI-84 Plus(2004)674529.41305068\(1,56 x 10^{-4}\)
TI-83 Plus(1999)674529.41305068\(1,56 x 10^{-4}\)TI-83 Premium CE(2017)674529.41305068\(1,56 x 10^{-4}\)