• Jueves 14 de Noviembre de 2024, 17:22

Autor Tema:  Un problema curioso con floor  (Leído 1021 veces)

Gnu

  • Nuevo Miembro
  • *
  • Mensajes: 2
    • Ver Perfil
Un problema curioso con floor
« en: Miércoles 21 de Abril de 2010, 21:54 »
0
Hola, no suelo plantear problemas pero me encontré con un tema curioso.
Definí esta función

Código: C
  1.  
  2. int espot(float n){
  3.     float i = 2;
  4.     while(i < n){
  5.         if (  pow(n, 1/i) == floor( pow(n, 1/i) )   )
  6.             return 1;
  7.         i++;
  8.     }
  9.     return 0;
  10. }
  11.  
  12.  

La idea es verificar si dado un entero positivo n exiten a y b enteros tales que a^b = n con b>1
Y devuelve 0 si no existen. Mi planteo fue ver si tiene raiz i-ésima entera

A mi parecer la función debería funcionar pero me devuelve 0 cuando ingreso 125
Y no es correcta la salida porque 125 = 5^3
Para cualquier otro número que he probado regresa el resultado correcto
Cuando imprimo lo que devuelven  pow(n, 1/i) y floor( pow(n, 1/i) ) a lo largo del bucle
Me da que cuando n es 125 e i es 3
pow(n, 1/i) = 5.000000
floor( pow(n, 1/i) ) 4.000000

A lo cual no le puedo encontrar sentido

Alguien me puede remarcar dónde está fallando? porque llevo un buen rato y hasta cambié floor por ceil y me redondea a 6.000000 sólo en ese caso también

Saludos

Epa

  • Miembro MUY activo
  • ***
  • Mensajes: 242
  • Nacionalidad: ar
    • Ver Perfil
Re: Un problema curioso con floor
« Respuesta #1 en: Domingo 25 de Abril de 2010, 01:29 »
0
Buenas.

Es curioso el problema, y no se porque se produce  :ph34r: , pero podes solucionarlo de esta manera:

Código: C++
  1.  
  2.  int espot(float n){
  3.      float i = 2, j;
  4.      while(i < n){
  5.          j = pow(n, 1/i);
  6.          if (  j == floor( j) )   )
  7.              return 1;
  8.          i++;
  9.      }
  10.      return 0;
  11.  }
  12.  
  13.  

Saludos
The sweet smell of a great sorrow lies over the land.


Gnu

  • Nuevo Miembro
  • *
  • Mensajes: 2
    • Ver Perfil
Re: Un problema curioso con floor
« Respuesta #2 en: Miércoles 28 de Abril de 2010, 23:53 »
0
Sí, ahí se arregla. A vos también te dio el mismo problema?
Gracias por responder

Saludos