Programación General > C/C++

 Un problema curioso con floor

(1/1)

Gnu:
Hola, no suelo plantear problemas pero me encontré con un tema curioso.
Definí esta función


--- Código: C --- int espot(float n){    float i = 2;    while(i < n){        if (  pow(n, 1/i) == floor( pow(n, 1/i) )   )            return 1;        i++;    }    return 0;}  
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:
Buenas.

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


--- Código: C++ ---  int espot(float n){     float i = 2, j;     while(i < n){         j = pow(n, 1/i);         if (  j == floor( j) )   )             return 1;         i++;     }     return 0; }  
Saludos

Gnu:
Sí, ahí se arregla. A vos también te dio el mismo problema?
Gracias por responder

Saludos

Navegación

[0] Índice de Mensajes

Ir a la versión completa