Foros del Web » Programando para Internet » PHP »

PHP esta loco o,O

Estas en el tema de PHP esta loco o,O en el foro de PHP en Foros del Web. Porque esto no me funciona ? $numero = 1; while ($numero <> 1.87) { $numero = $numero + 0.01; } echo ($numero);...
  #1 (permalink)  
Antiguo 04/04/2010, 10:51
 
Fecha de Ingreso: agosto-2008
Mensajes: 271
Antigüedad: 16 años, 4 meses
Puntos: 2
PHP esta loco o,O

Porque esto no me funciona ?

$numero = 1;

while ($numero <> 1.87)
{
$numero = $numero + 0.01;
}
echo ($numero);

  #2 (permalink)  
Antiguo 04/04/2010, 11:04
Avatar de mauroave  
Fecha de Ingreso: julio-2009
Mensajes: 50
Antigüedad: 15 años, 4 meses
Puntos: 0
Respuesta: PHP esta loco o,O

Hola amigo, no hay problema de lógica en ese código, el problema es que ese while se ejecuta un número muy grande de veces, debido a que va sumando 0.01 hasta llegar a 1.87. Lo que tienes que hacer es aumentar el límite de ejecucion de php. Hecha un vistaso a esto [URL="http://php.net/manual/en/function.set-time-limit.php"]http://php.net/manual/en/function.set-time-limit.php[/URL]

Espero que te haya ayudado. Saludos cordiales
  #3 (permalink)  
Antiguo 04/04/2010, 11:07
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años, 6 meses
Puntos: 1517
Respuesta: PHP esta loco o,O

Te sugiero indicar o si es < o >. Aquí tienes info sobre los operadores.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #4 (permalink)  
Antiguo 04/04/2010, 11:57
 
Fecha de Ingreso: agosto-2008
Mensajes: 271
Antigüedad: 16 años, 4 meses
Puntos: 2
Le puse 300 segundos y lo unico que hizo fue durar mas para tirar el error, creo que el problema es del <> cuando se utilizan numeros decimales.

Intenté este codigo

$numero = 1;

while ($numero <> 100000)
{
$numero = $numero + 1;
}
echo ($numero);

y me respondio en 4 segundos, considerando que este loop es mas largo.

Alguien sabe a que se debe ?

grax

alguien tendria la gran gran amabilidad de ayudarme ? soy nuevo en PHP me lei un manual ayer y no he tenido problemas hasta ahora, esto me esta volviendo loco, porq estoy consciente de que mi programa esta bien, es PHP que esta haciendo algo que al parecer en mi manual no estaba y que busco por internet mas manuales y no habla sobre algo asi !

grax

$numero = 1;

while ($numero <> 1.87)
{
$numero = $numero + 0.01;
}
echo ($numero);

Me podrias explicar porque no terminaria ?
Se supone que al ir sumando 0.01, debe llegar
a 1.87 en algun momento(en la vuelta numero 87) y no volveria entrar al loop, ya que 1.87 no es desigual a 1.87(condicion), imprime $numero y fin.

!!!!!!! NO COMPRENDO !!!!!! algun Pro que me ayude! por favor !

Carl se que con tu codigo si funciona, pero necesito que funcione con <>, es decir, necesito comprender el porq no funciona con <>, analiza el programa con <> y dime porq no funciona ?

Solo como aprendizaje, porque segun yo deberia funcionar !!! o no ?

nadie me puede decir :(?

Última edición por GatorV; 05/04/2010 a las 10:07
  #5 (permalink)  
Antiguo 04/04/2010, 12:35
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 8 meses
Puntos: 2534
Respuesta: PHP esta loco o,O

es que lo que planteas es incoherente.... ¿donde le especificaste 300 segundos?? ¿de donde sacaste tal idea??

ese es tu problema, ya que eso no se especifica con un integer.... te recuerdo que no puedes controlar cuanto dura el loop.... eso simplemente varía dependiendo de la memoria disponible, etc, etc...

en todo caso, si deseas pausar el proceso usa sleep() o usleep()

pero sería bueno preguntar... ¿que pretendes con tu código???

PDTA: ¿quien es el loco??
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #6 (permalink)  
Antiguo 04/04/2010, 12:42
Avatar de Carlmycol  
Fecha de Ingreso: diciembre-2007
Ubicación: Los Teques, Venezuela
Mensajes: 240
Antigüedad: 17 años
Puntos: 3
Respuesta: PHP esta loco o,O

Código PHP:
$numero 1;

while (
$numero <> 1.87)
{
$numero $numero 0.01;
}
echo (
$numero); 
Creo que el loop nunca terminaría...

Quizas quieras plantear while ($numero <= 100000) Al final del bucle imprimiría 100001

O quizas si planteas while ($numero < 100000) al final del bucle imprimiría 100000

edit:

Intentalo de esta forma
Código PHP:
<?php
$numero 
1.0;

while (
$numero 1.87)
{
$numero $numero 0.01;
}
echo (
$numero);
?>
Saludos

Última edición por Carlmycol; 04/04/2010 a las 12:53
  #7 (permalink)  
Antiguo 04/04/2010, 12:52
 
Fecha de Ingreso: agosto-2008
Mensajes: 271
Antigüedad: 16 años, 4 meses
Puntos: 2
Respuesta: PHP esta loco o,O

pateketrueke observa las respuesta que me dio mauroave.
Le incremente el limite a 300 segundos y aun asi no me dio respuesta.
luego verificando si se debia a la gran cantidad de vueltas que debe de realizar para
alcanzar la cantidad 1.87 desde 1, intente poner numeros reales de 1 a 100000, que logicamente son muchas mas vueltas y me respondio al instante.

no se de que me serviria pausarlo, podrias introducirlo en mi primer trozo de codigo de manera que si de el resultado de 1.87 ?

te lo agradeceria , grax.
  #8 (permalink)  
Antiguo 04/04/2010, 12:54
Avatar de Carlmycol  
Fecha de Ingreso: diciembre-2007
Ubicación: Los Teques, Venezuela
Mensajes: 240
Antigüedad: 17 años
Puntos: 3
Respuesta: PHP esta loco o,O

Intenta la solucion que te di en mi post anterior

Saludos
  #9 (permalink)  
Antiguo 05/04/2010, 08:13
Colaborador
 
Fecha de Ingreso: octubre-2009
Ubicación: Tokyo - Japan !
Mensajes: 3.867
Antigüedad: 15 años, 1 mes
Puntos: 334
Respuesta: PHP esta loco o,O

Código PHP:
Ver original
  1. $numero = 1;
  2. while ($numero < 1.87){
  3.     $numero += 0.01;
  4.     echo $numero."<br>\n";
  5. }


no abro otro post por que es casi lo mismo
Código PHP:
Ver original
  1. <?php
  2. for($a = 0.1; $a < 70; $a += 0.1){
  3.     echo $a."<br>\n";
  4. }
  5. ?>

por que hace todo bien hasta el 54 ?

Código txt:
Ver original
  1. ... etc ...
  2. 53
  3. 53.1
  4. 53.2
  5. 53.3
  6. 53.4
  7. 53.5
  8. 53.6
  9. 53.7
  10. 53.8
  11. 53.9
  12. 54
  13. 54.1
  14. 54.200000000001
  15. 54.300000000001
  16. 54.400000000001
  17. 54.500000000001
  18. 54.600000000001
  19. .... etc ...

:S?
__________________
More about me...
~ @rhyudek1
~ Github

Última edición por Hidek1; 05/04/2010 a las 08:32
  #10 (permalink)  
Antiguo 05/04/2010, 08:38
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años, 6 meses
Puntos: 1517
Respuesta: PHP esta loco o,O

No sé por qué pasa eso, pero para resolver el problema usa round.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #11 (permalink)  
Antiguo 05/04/2010, 13:10
 
Fecha de Ingreso: agosto-2008
Mensajes: 271
Antigüedad: 16 años, 4 meses
Puntos: 2
Respuesta: PHP esta loco o,O

Grax a todos !

Es cierto lo que dijo abimaelrc, la solucion es round, aunque no sabemos porq lo haga, almenos
existe una solucion a ese comportamiento y eso es lo que cuenta.

Mil grax a todos son unos PRO!
  #12 (permalink)  
Antiguo 06/04/2010, 07:47
 
Fecha de Ingreso: abril-2010
Mensajes: 2
Antigüedad: 14 años, 8 meses
Puntos: 0
Respuesta: PHP esta loco o,O

Cita:
Iniciado por Hidek1 Ver Mensaje
(...)

Código PHP:
Ver original
  1. <?php
  2. for($a = 0.1; $a < 70; $a += 0.1){
  3.     echo $a."<br>\n";
  4. }
  5. ?>

por que hace todo bien hasta el 54 ?

Código txt:
Ver original
  1. ... etc ...
  2. 53
  3. 53.1
  4. 53.2
  5. 53.3
  6. 53.4
  7. 53.5
  8. 53.6
  9. 53.7
  10. 53.8
  11. 53.9
  12. 54
  13. 54.1
  14. 54.200000000001
  15. 54.300000000001
  16. 54.400000000001
  17. 54.500000000001
  18. 54.600000000001
  19. .... etc ...

:S?
Hola,

No me consta que sea la razón de este problema, pero me hizo recordar lo siguiente:

Matemáticamente, entre cada número real existe una cantidad infinita de números reales. Pero en una máquina existe una cantidad finita de ellos. Es decir, entre cada fracción de número hay un "step", ese step es tan pequeño que da la sensación de continuidad, pero en la práctica no lo es.

ese 000000001 que te aparece puede ser el error acumulado a lo largo de las 540 sumas anteriores.

En la página 9 de - https://www.u-cursos.cl/ingenieria/2007/2/MA33A/3/material_docente/objeto/136815 - hay una explicación algo más clara.

Saludos!

Última edición por keber; 06/04/2010 a las 07:55 Razón: Link
  #13 (permalink)  
Antiguo 06/04/2010, 07:52
Colaborador
 
Fecha de Ingreso: octubre-2009
Ubicación: Tokyo - Japan !
Mensajes: 3.867
Antigüedad: 15 años, 1 mes
Puntos: 334
Respuesta: PHP esta loco o,O

Cita:
Iniciado por keber Ver Mensaje
Hola,

No me consta que sea la razón de este problema, pero me hizo recordar lo siguiente:

Matemáticamente, entre cada número real existe una cantidad infinita de números reales. Pero en una máquina existe una cantidad finita de ellos. Es decir, entre cada fracción de número hay un "step", ese step es tan pequeño que da la sensación de continuidad, pero en la práctica no lo es.

ese 000000001 que te aparece puede ser el error acumulado a lo largo de las 540 sumas anteriores.

En la página 9 de este documento hay una explicación algo más clara, [URL="https://www.u-cursos.cl/ingenieria/2007/2/MA33A/3/material_docente/objeto/136815"]https://www.u-cursos.cl/ingenieria/2007/2/MA33A/3/material_docente/objeto/136815[/URL]

Saludos!

gracias por la informacion!...
de seguro tiene algo que ver con 2 + 2 = 5
__________________
More about me...
~ @rhyudek1
~ Github
  #14 (permalink)  
Antiguo 06/04/2010, 08:10
 
Fecha de Ingreso: abril-2010
Mensajes: 2
Antigüedad: 14 años, 8 meses
Puntos: 0
Respuesta: PHP esta loco o,O

Cita:
Iniciado por Bigcrime Ver Mensaje
Porque esto no me funciona ?

$numero = 1;

while ($numero <> 1.87)
{
$numero = $numero + 0.01;
}
echo ($numero);

numero lo inicalizas como entero, prueba con $numero = 1.0 para inicializarlo como float.

¿que el distinto no es " != " ?

while($numero != 1.87)

saludos.
  #15 (permalink)  
Antiguo 06/04/2010, 14:52
 
Fecha de Ingreso: febrero-2010
Mensajes: 96
Antigüedad: 14 años, 10 meses
Puntos: 1
Respuesta: PHP esta loco o,O

El distinto es !=
  #16 (permalink)  
Antiguo 06/04/2010, 14:56
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 8 meses
Puntos: 2534
Respuesta: PHP esta loco o,O

Cita:
Iniciado por xorcisa Ver Mensaje
El distinto es !=
de hecho ambos <> y != significan lo mismo... ;)

no estaría nada mal leer el manual:
http://php.net/manual/en/language.operators.php
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #17 (permalink)  
Antiguo 07/04/2010, 01:44
 
Fecha de Ingreso: febrero-2010
Mensajes: 96
Antigüedad: 14 años, 10 meses
Puntos: 1
Respuesta: PHP esta loco o,O

Okey gracias por la info! No sabia que tambien valia <> siempre uso !=
  #18 (permalink)  
Antiguo 07/04/2010, 13:15
 
Fecha de Ingreso: agosto-2008
Mensajes: 271
Antigüedad: 16 años, 4 meses
Puntos: 2
Respuesta: PHP esta loco o,O

aunque pongas 1.0 o 1.00 el error pasa.

Incluso ese error puede llevar otras mas complicaciones,
como el que PHP no vea diferencia entre numeros iguales,
condiciones tales como 14 <> 14 puede llevar a PHP a decir
verdadero cuando logicamente eso es falso.

Por eso vuelvo y digo gracias a dios existe round,
les sugiero que cada vez que apliquen procesos con numero
decimales a una variable le apliquen un round, almenos tengo
la experiencia dentro de loops, pero ignoro la cantidad de
incosistencias que pueda llevar este inconveniente.
  #19 (permalink)  
Antiguo 07/04/2010, 13:30
Colaborador
 
Fecha de Ingreso: octubre-2009
Ubicación: Tokyo - Japan !
Mensajes: 3.867
Antigüedad: 15 años, 1 mes
Puntos: 334
Respuesta: PHP esta loco o,O

Cita:
Iniciado por Bigcrime Ver Mensaje
aunque pongas 1.0 o 1.00 el error pasa.

Incluso ese error puede llevar otras mas complicaciones,
como el que PHP no vea diferencia entre numeros iguales,
condiciones tales como 14 <> 14 puede llevar a PHP a decir
verdadero cuando logicamente eso es falso.

Por eso vuelvo y digo gracias a dios existe round,
les sugiero que cada vez que apliquen procesos con numero
decimales a una variable le apliquen un round, almenos tengo
la experiencia dentro de loops, pero ignoro la cantidad de
incosistencias que pueda llevar este inconveniente.
seria un buen metodo si fuera un loop de numeros enteros.. pero el necesita flotantes 0.x

saludos!
__________________
More about me...
~ @rhyudek1
~ Github

Etiquetas: loco
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 02:31.