elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: (TUTORIAL) Aprende a emular Sentinel Dongle By Yapis


+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web (Moderador: #!drvy)
| | |-+  Problema javascript una multiplicación me da un número periodico.
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: Problema javascript una multiplicación me da un número periodico.  (Leído 8,568 veces)
Aikanáro Anário


Desconectado Desconectado

Mensajes: 694



Ver Perfil WWW
Problema javascript una multiplicación me da un número periodico.
« en: 16 Mayo 2011, 20:30 pm »

Este es mi primer programa con javascript. Que calculo a partir de los años. El tiempo que has vivido en meses, semanas, días, segundos y minutos aproximadamente, claro.

Código
  1. <script language ="javascript">
  2. var edad;
  3. edad = prompt ('Ingrese su edad:');
  4. document.write ('Su edad en años es: ');
  5. document.write (edad = edad*12);
  6. document.write ('. Su edad en meses es: ');
  7. document.write (edad = edad*4.30);
  8. document.write ('. Su edad en semanas es: ');
  9. document.write (edad = edad*7);
  10. document.write ('. Su edad en días es: ');
  11. document.write (edad = edad*24);
  12. document.write ('. Su edad en horas: ');
  13. document.write (edad = edad*60);
  14. document.write ('. Su edad en minutos es: ');
  15. document.write (edad = edad*60);
  16. document.write ('. Su edad en segundos es: ');
  17. document.write (edad);
  18. </script>

El problema es que me dan números decimales periodicos. Por ejemplo, si mi edad es 18, el número de semanas que me da es 6501.599999999999 y no sé de donde salen todos esos nueves.

Si pongo 14 por edad, el número de días, horas, minutos y segundos, me dan periódicos.

Pero si por ejemplo pongo 20, todo me da bien.

Una multiplicación de números decimales no periodicos no puede dar un periodico.

Nota: este código tiene un error de lógica, ver el código de más abajo, que está corregido.


« Última modificación: 16 Mayo 2011, 21:06 pm por Aikanáro Anário » En línea

Lo que faltaba en internet: http://binar10s.blogspot.com/
pucheto

Desconectado Desconectado

Mensajes: 215


Ver Perfil
Re: Problema javascript una multiplicación me da un número periodico.
« Respuesta #1 en: 16 Mayo 2011, 20:47 pm »

edad = 18 * 12  --> ( 216 )
edad = (216) *4.30 --> (928.8)
edad = (928.8) * 7 --> (6501.6)

A vos te da con decimales periodicos pq hay q acordarse q la representacion de punto flotante de las pcs es finita, y pq se puede usar por redondeo o por truncamiento.


En línea

Aikanáro Anário


Desconectado Desconectado

Mensajes: 694



Ver Perfil WWW
Re: Problema javascript una multiplicación me da un número periodico.
« Respuesta #2 en: 16 Mayo 2011, 21:04 pm »

En el algoritmo anterior había un pequeño error de cálculo. Ahora está corregido. El error no tiene nada que ver con lo que pregunto, era que la edad en años estaba mal y como todo se deriva de los años, todo estaba mal.

Código
  1. <script language ="javascript">
  2. var edad;
  3. edad = prompt ('Ingrese su edad:');
  4. document.write ('Su edad en años es: ');
  5. document.write (edad);
  6. document.write ('. Su edad en meses es: ');
  7. document.write (edad = edad*12);
  8. document.write ('. Su edad en semanas es: ');
  9. document.write (edad = edad*4.3);
  10. document.write ('. Su edad en días es: ');
  11. document.write (edad = edad*7);
  12. document.write ('. Su edad en horas: ');
  13. document.write (edad = edad*24);
  14. document.write ('. Su edad en minutos es: ');
  15. document.write (edad = edad*60);
  16. document.write ('. Su edad en segundos es: ');
  17. document.write (edad = edad*60);
  18. </script>

edad = 18 * 12  --> ( 216 )
edad = (216) *4.30 --> (928.8)
edad = (928.8) * 7 --> (6501.6)

A vos te da con decimales periodicos pq hay q acordarse q la representacion de punto flotante de las pcs es finita, y pq se puede usar por redondeo o por truncamiento.

Mmm, no me convence tu respuesta, porque al multiplicar la edad en meses (216) por la edad el número de semanas que tiene un mes (4.3) para que nos de el número de semanas, da como resultado un decimal también (928.8) y ese decimal, obviamente no es periódico, ni con la calculadora, ni con el programa. Pero cuando se multiplica ese resultado por 7 para el número de días, ahí es cuando da el decimal periódico en el programa.

O sea, si fuera como tu dices tanto el 928.8 (de las semanas) como el 156038.4 (de las horas vividas) fueran periódicos en el programa.
« Última modificación: 16 Mayo 2011, 21:09 pm por Aikanáro Anário » En línea

Lo que faltaba en internet: http://binar10s.blogspot.com/
pucheto

Desconectado Desconectado

Mensajes: 215


Ver Perfil
Re: Problema javascript una multiplicación me da un número periodico.
« Respuesta #3 en: 17 Mayo 2011, 04:17 am »

http://babbage.cs.qc.edu/IEEE-754/Decimal.html por ahi con esto vas a ver bien lo q digo.... La representacion en punto flotante no es exacta !
En línea

Aikanáro Anário


Desconectado Desconectado

Mensajes: 694



Ver Perfil WWW
Re: Problema javascript una multiplicación me da un número periodico.
« Respuesta #4 en: 17 Mayo 2011, 05:27 am »

Bueno y entonces porque no pasa con los otros números que también son decimales?
En línea

Lo que faltaba en internet: http://binar10s.blogspot.com/
pucheto

Desconectado Desconectado

Mensajes: 215


Ver Perfil
Re: Problema javascript una multiplicación me da un número periodico.
« Respuesta #5 en: 17 Mayo 2011, 13:56 pm »

Pq para algunos numeros justo cae en un lugar donde float tiene representacion decimal exacta.... cuando se trabaja en punto flotante hay un monton de tipos de errores, errores cuando sumas, cuando restas, errores de division y multiplicacion... error con cualquier operacion q hagas... error de guardar en memoria! ( se trabaja en punto flotante de 80bits en la fpu ). Los numeros de punto flotante no se manejan nunca de forma exacta, se manejan siempre por tolerancias y errores.
En línea

Aikanáro Anário


Desconectado Desconectado

Mensajes: 694



Ver Perfil WWW
Re: Problema javascript una multiplicación me da un número periodico.
« Respuesta #6 en: 17 Mayo 2011, 19:31 pm »

Ok, ya entendí. Gracias  ;D

¿Cómo se controla eso en javascript? para que el resultado solo se muestre con x numeros de precisión.
En línea

Lo que faltaba en internet: http://binar10s.blogspot.com/
pucheto

Desconectado Desconectado

Mensajes: 215


Ver Perfil
Re: Problema javascript una multiplicación me da un número periodico.
« Respuesta #7 en: 18 Mayo 2011, 03:23 am »

En javascript ni idea, en general los distintos streams tienen una opcion para formatear la salida...
En línea

tragantras


Desconectado Desconectado

Mensajes: 466


Ver Perfil
Re: Problema javascript una multiplicación me da un número periodico.
« Respuesta #8 en: 18 Mayo 2011, 09:18 am »

function roundNumber(num, dec) {
   var result = Math.round(num*Math.pow(10,dec))/Math.pow(10,dec);
   return result;
}

@http://forums.devarticles.com/javascript-development-22/javascript-to-round-to-2-decimal-places-36190.html
En línea

Colaboraciones:
1 2
Aikanáro Anário


Desconectado Desconectado

Mensajes: 694



Ver Perfil WWW
Re: Problema javascript una multiplicación me da un número periodico.
« Respuesta #9 en: 18 Mayo 2011, 23:26 pm »

Muy clara tu explicación para un recién iniciado.
 :¬¬
En línea

Lo que faltaba en internet: http://binar10s.blogspot.com/
Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
[Com] float v2 (Suma,resta,multiplicacion y division decimal)
Scripting
LauBuru 3 3,739 Último mensaje 4 Julio 2010, 22:11 pm
por LauBuru
Factor de multiplicación y FSB.
Overclocking y Refrigeración
alvaroons 4 5,783 Último mensaje 14 Febrero 2011, 02:02 am
por alvaroons
[c++] Suma, resta, multiplicacion y division « 1 2 »
Programación C/C++
dani__ 16 58,061 Último mensaje 6 Junio 2013, 03:08 am
por dorkam
MOVIDO: Problema javascript una multiplicación me da un número periodico.
Scripting
leogtz 0 889 Último mensaje 17 Mayo 2011, 07:26 am
por leogtz
Multiplicación de dos double sale 0
Programación C/C++
Kasswed 1 2,327 Último mensaje 26 Mayo 2011, 17:59 pm
por Mr.Blue
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines