Tags Palabras claves

Error de javascript

28/12/2005 - 12:57 por Daniel Fernández | Informe spam
Hola, existe un problema con Explorer 6.0 (varias versiones). Cuando
ejecuto el codigo de abajo, resta mal los float. Debe ser un problema de
implementacion de javascript.

Codigo:
<html>
<head>
<script>
function resta() {
var pp = 4.1;
var p = 0.1;

while (pp > 0) {
document.write("<br>" + pp);
pp = pp-p;
}
}
</script>
</head>
<body onload="resta()">
</body>
</html>

Segmentation Fault

Preguntas similare

Leer las respuestas

#1 Ramón Sola [MVP Windows - Shell/User]
29/12/2005 - 18:25 | Informe spam
Hash: SHA1

Yo no lo calificaría como un error de implementación de Javascript. He
elaborado un pequeño programa en C equivalente y los resultados son
similares.

#include <stdio.h>

int main(void)
{
double pp = 4.1, p = 0.1;

while (pp > 0) {
printf("%.20lf", pp);
pp = pp - p;
}
}

Esto se debe a la dificultad para representar con exactitud algunos números
decimales en binario, de la misma forma que nosotros perdemos cierta
precisión al intentar representar la fracción 1/3 en base 10
(0.3333333333...).


Más información:

PRB: Multiplication Errors in JScript
http://support.microsoft.com/kb/244699

Aunque el artículo se centre en pérdidas de precisión al multiplicar, los
fundamentos se pueden aplicar a cualquier operación sobre números de punto
flotante.

Ramón Sola / / MVP Windows - Shell/User
Para obtener la dirección correcta no hacen falta los sellos.
Por favor, usar el correo sólo para cuestiones ajenas a los
grupos de noticias, gracias.

Cuentan que "Daniel Fernández"
escribió en el mensaje
news: lo siguiente:
Hola, existe un problema con Explorer 6.0 (varias versiones). Cuando
ejecuto el codigo de abajo, resta mal los float. Debe ser un problema de
implementacion de javascript.

Codigo:
<html>
<head>
<script>
function resta() {
var pp = 4.1;
var p = 0.1;

while (pp > 0) {
document.write("<br>" + pp);
pp = pp-p;
}
}
</script>
</head>
<body onload="resta()">
</body>
</html>

Segmentation Fault

Respuesta Responder a este mensaje
#2 Daniel Fernández
30/12/2005 - 09:05 | Informe spam
Si, el resultado es parecido, pero el código en C que has puesto no pasa de
4.1 a 3.999999 saltandose el 4.0 como pasa en javascript. Ese es el error al
que me refiero.

Segmentation Fault


"Ramón Sola [MVP Windows - Shell/User]" wrote:

Hash: SHA1

Yo no lo calificaría como un error de implementación de Javascript. He
elaborado un pequeño programa en C equivalente y los resultados son
similares.

#include <stdio.h>

int main(void)
{
double pp = 4.1, p = 0.1;

while (pp > 0) {
printf("%.20lf", pp);
pp = pp - p;
}
}

Esto se debe a la dificultad para representar con exactitud algunos números
decimales en binario, de la misma forma que nosotros perdemos cierta
precisión al intentar representar la fracción 1/3 en base 10
(0.3333333333...).


Más información:

PRB: Multiplication Errors in JScript
http://support.microsoft.com/kb/244699

Aunque el artículo se centre en pérdidas de precisión al multiplicar, los
fundamentos se pueden aplicar a cualquier operación sobre números de punto
flotante.

Ramón Sola / / MVP Windows - Shell/User
Para obtener la dirección correcta no hacen falta los sellos.
Por favor, usar el correo sólo para cuestiones ajenas a los
grupos de noticias, gracias.

Cuentan que "Daniel Fernández"
escribió en el mensaje
news: lo siguiente:
> Hola, existe un problema con Explorer 6.0 (varias versiones). Cuando
> ejecuto el codigo de abajo, resta mal los float. Debe ser un problema de
> implementacion de javascript.
>
> Codigo:
> <html>
> <head>
> <script>
> function resta() {
> var pp = 4.1;
> var p = 0.1;
>
> while (pp > 0) {
> document.write("<br>" + pp);
> pp = pp-p;
> }
> }
> </script>
> </head>
> <body onload="resta()">
> </body>
> </html>
>
> Segmentation Fault



Respuesta Responder a este mensaje
#3 Ramón Sola [MVP Windows - Shell/User]
31/12/2005 - 01:40 | Informe spam
Hash: SHA1

¿Tienes un compilador para poder probar el programa escrito en C?

Ramón Sola / / MVP Windows - Shell/User
Para obtener la dirección correcta no hacen falta los sellos.
Por favor, usar el correo sólo para cuestiones ajenas a los
grupos de noticias, gracias.

Cuentan que "Daniel Fernández"
escribió en el mensaje
news: lo siguiente:
Si, el resultado es parecido, pero el código en C que has puesto no pasa
de
4.1 a 3.999999 saltandose el 4.0 como pasa en javascript. Ese es el
error al que me refiero.

Segmentation Fault


"Ramón Sola [MVP Windows - Shell/User]" wrote:

> Yo no lo calificaría como un error de implementación de Javascript. He
> elaborado un pequeño programa en C equivalente y los resultados son
> similares.
>
> #include <stdio.h>
>
> int main(void)
> {
> double pp = 4.1, p = 0.1;
>
> while (pp > 0) {
> printf("%.20lf", pp);
> pp = pp - p;
> }
> }
>
> Esto se debe a la dificultad para representar con exactitud algunos
> números decimales en binario, de la misma forma que nosotros perdemos
> cierta precisión al intentar representar la fracción 1/3 en base 10
> (0.3333333333...).
>
>
> Más información:
>
> PRB: Multiplication Errors in JScript
> http://support.microsoft.com/kb/244699
>
> Aunque el artículo se centre en pérdidas de precisión al multiplicar,
> los fundamentos se pueden aplicar a cualquier operación sobre números
> de punto flotante.

Respuesta Responder a este mensaje
#4 Daniel Fernández
02/01/2006 - 09:35 | Informe spam
No, en realidad me he inventado la respuesta, no te jode. Si lo digo es
porque lo he probado. Cygwin con gcc. Resultado:
4.09999999999999964473
3.99999999999999955591
3.89999999999999946709
3.79999999999999937828
3.69999999999999928946
3.59999999999999920064
3.49999999999999911182
3.39999999999999902300
3.29999999999999893419
3.19999999999999884537
3.09999999999999875655
2.99999999999999866773
2.89999999999999857891
2.79999999999999849010
2.69999999999999840128
2.59999999999999831246
2.49999999999999822364
2.39999999999999813483
2.29999999999999804601
2.19999999999999795719
2.09999999999999786837
1.99999999999999777955
1.89999999999999769074
1.79999999999999760192
1.69999999999999751310
1.59999999999999742428
1.49999999999999733546
1.39999999999999724665
1.29999999999999715783
1.19999999999999706901
1.09999999999999698019
0.99999999999999700240
0.89999999999999702460
0.79999999999999704681
0.69999999999999706901
0.59999999999999709122
0.49999999999999711342
0.39999999999999713562
0.29999999999999715783
0.19999999999999715228
0.09999999999999714673

Segmentation Fault


"Ramón Sola [MVP Windows - Shell/User]" wrote:

Hash: SHA1

¿Tienes un compilador para poder probar el programa escrito en C?

Ramón Sola / / MVP Windows - Shell/User
Para obtener la dirección correcta no hacen falta los sellos.
Por favor, usar el correo sólo para cuestiones ajenas a los
grupos de noticias, gracias.

Cuentan que "Daniel Fernández"
escribió en el mensaje
news: lo siguiente:
> Si, el resultado es parecido, pero el código en C que has puesto no pasa
> de
> 4.1 a 3.999999 saltandose el 4.0 como pasa en javascript. Ese es el
> error al que me refiero.
>
> Segmentation Fault
>
>
> "Ramón Sola [MVP Windows - Shell/User]" wrote:
>
> > Yo no lo calificaría como un error de implementación de Javascript. He
> > elaborado un pequeño programa en C equivalente y los resultados son
> > similares.
> >
> > #include <stdio.h>
> >
> > int main(void)
> > {
> > double pp = 4.1, p = 0.1;
> >
> > while (pp > 0) {
> > printf("%.20lf", pp);
> > pp = pp - p;
> > }
> > }
> >
> > Esto se debe a la dificultad para representar con exactitud algunos
> > números decimales en binario, de la misma forma que nosotros perdemos
> > cierta precisión al intentar representar la fracción 1/3 en base 10
> > (0.3333333333...).
> >
> >
> > Más información:
> >
> > PRB: Multiplication Errors in JScript
> > http://support.microsoft.com/kb/244699
> >
> > Aunque el artículo se centre en pérdidas de precisión al multiplicar,
> > los fundamentos se pueden aplicar a cualquier operación sobre números
> > de punto flotante.



Respuesta Responder a este mensaje
#5 Ramón Sola [MVP Windows - Shell/User]
03/01/2006 - 01:20 | Informe spam
Hash: SHA1

Paso del tema.

Ramón Sola / / MVP Windows - Shell/User
Para obtener la dirección correcta no hacen falta los sellos.
Por favor, usar el correo sólo para cuestiones ajenas a los
grupos de noticias, gracias.

Cuentan que "Daniel Fernández"
escribió en el mensaje
news: lo siguiente:
No, en realidad me he inventado la respuesta, no te jode.
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida