Autor Tema: Problemas con las matemáticas.  (Leído 1990 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado RGL

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 634
Problemas con las matemáticas.
« en: 06 de Julio de 2004, 06:06:00 »
Vamos a ver,

Tengo la variable A para una operación con el timer que es 1.9 y siempre será ese valor fijo. Otra variable B que es un integer (de 0 a 255), es un valor en segundos y que puede variar entre 30 y 60, ambas tengo que multiplicarlas.

La primera idea que se me ha ocurrido es coger la variable A y redondearla a 2, pero me produce errores de 2 segundos en un retardo de 30 segundos, es decir un 6% de error.  

Me gustaría si alguien tiene una idea mejor de como hacer esto más preciso.

Saludos
Ricky
Madrid-España

Desconectado manex_1987

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1127
RE: Problemas con las matemáticas.
« Respuesta #1 en: 06 de Julio de 2004, 07:11:00 »
Picbasic Plus tiene un soporte infalible para las mates en coma flotante.
La serie de 12 bits no soporta la coma flotante. La de 14 soporta plenamente la coma flotante, pero no las operaciones aritmeticas complejas.
La serie de 16 bits, soporta, ademas de las operaciones elementales, [seno,coseno,tangente,arcoseno,arco-coseno,arcotangente,raiz cuadrada,logaritmo10,logaritmoE] con coma flotante, algo que resulta muy util en algunas situaciones, aunque come MUCHA memoria de programa (unos 2000 words), a pesar de que la serie 18F no es precisamente falta en memoria.

Mi recomendación es que uses PicbasicPlus, o sino descargarte alguna rutina de coma flotante desde alguna pagina...

saludos

-------------
Me ha venido inspiracion subita, y os expongo este procedimiento, aver si os sirve ; acabo de inventarmelo sobre la marcha.


1.9*30 = (10*30)+(9*30) / 10


Supongamos 1.9*25 = 47.5
1.9*25 = (10*25)+(9*25) / 10 = 47.5
PERO SUPONGAMOS QUE NO HAY SOPORTE PARA COMA, ENTONCES EL RESULTADO LO ALMACENAREMOS EN DOS VARIABLES, UNO SERA EL ENTERO Y EL OTRO , UNA POTENCIA DEL 10 (1 = 10^1  , 2=10^2...)

entonces:
47.5 seria lo mismo que :  475  y 1 (desplazamiento de la coma a la IZQUIERDA)

si luego queremos re-usar este numero:
"47.5 * 3"
Seria:   475 * 3 = 1425 , y como la segunda variable = 1 , pues supondremos que es 142.5, por si queremos enviar la variable serialmente o a un LCD, siempre como si fuera un STRING.


Ahora un poco mas complejo:

"4.7 * 3.2"
= (40*3.2)+(7*3.2) / 10
Y usando las reglas anteriores:

>>40*3.2  =  3.2*40  = (30*40)+(2*40) =1280  ,   segunda variable=1
>>7*3.2  =  3.2*7 = (30*7)+(2*7) = 224 , segunda variable(II) = 1

Ahora, cogeriamos tantos numeros desde la derecha como el valor de "segunda variable":
1280 , s.v=1  >> 128  y 0
224 , s.v=1    >> 22 y 4

Sumamos las dos por separado:
128+22=150
0+4=4
Y volvemos a juntarlas
150 y 4 = 1504 , s.v=1

Aqui no acaba la cosa, la operación en sí llevaba /10, por lo que:
s.v=2

Resultado: 1504, s.v=2  (15.04)


Acabo de inventarme ahora mismo el procedimiento, ya me comentaréis sobre su efectividad,  lo agradeceria mucho.

Saludos!



Desconectado RGL

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 634
RE: Problemas con las matemáticas.
« Respuesta #2 en: 06 de Julio de 2004, 07:52:00 »
Gracias manex,

Se me ha ocurrido otra idea para ajustar a 2 esa relación que me salía antes y que no había caido. 1.9 era las veces que tenía que desbordar el timer 1 para contar un segundo, pero ahora hago una precarga con un valor especifico 3036 en el timer 1 y justo me sale que el numero de desbordamientos debe ser 2. Dos exacto, así que se acabaron las mates, todo con enteros y a ahorrar memoria.

Gracias manex, guardaré esta explicación tuya porque el PBP anda mal con punto floating y puede servir tu idea.

Saludos
Ricky
Madrid-España

Desconectado josemyzm

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 309
RE: Problemas con las matemáticas.
« Respuesta #3 en: 06 de Julio de 2004, 16:37:00 »
Y no sería facil también multiplicar por 19 en lugar de 1.9 y luego dividir por 10?

Un saludo.
Saludos desde Logroño (España)