C++
#include <math.h>
#include <iostream>
#include <stdlib.h>
#include <stdio.h>
using namespace std;
int main()
{
int cubo = 0;
cubo = pow(5, 3);
cout << "POW a traves de la variable 'cubo': " << cubo << endl; // me devuelve 124 (mal)
cout << "POW directamente a consola: " << pow(5, 3); // me devuelve 125 (bien)
return 0;
}
Solo lo he detectado, de momento, con el 5, tanto al cuadrado como al cubo. En el primer caso, al cuadrado, me devuelve 24 por variable (mal), y 25 directo a consola (bien)
He seguido trasteando con este "problema", y he ideado un código para detectar qué numero elevado a qué potencia da un resultado diferente, si es pasado por variable o si sale directamente a consola.
Me explico después del código:
C++
#include <math.h>
#include <iostream>
#include <stdlib.h>
#include <stdio.h>
using namespace std;
int main()
{
int resultado_variable = 0;
int cantidad = 0;
float potencia = 0;
cout << "\nEscribe la cantidad de numeros a elevar a partir del 1: ";
cin >> cantidad;
cout << "Escribe la potencia a elevar: ";
cin >> potencia;
for (int i = 1; i <= cantidad; i++)
{
resultado_variable = pow(i, potencia);
if (resultado_variable != pow(i, potencia))
{
cout << "\n" << i << "^" << potencia << endl;
cout << "POW a traves de la variable: " << resultado_variable << endl;
cout << "POW directamente a consola: " << pow(i, potencia) << endl;
}
}
cout << "\n";
return 0;
}
Tanto si la variable como el iterador del bucle FOR se declaran como
float
hasta donde he probado, el código no detecta diferencias, lo cual sería una solución satisfactoria para evitar este fenómeno, y efectuar un cálculo de cierta precisión.
Pero si la variable o el iterador se declaran como enteroint
, es entonces cuando aparecen resultados muy curiosos. Esto es, números iguales en pantalla que el código detecta como diferentes.
Efectivamente, no me cuadra lo del redondeo, ya que más bien parece que ante un resultado como 24,99999999..., que redondeando seguiría siendo 25, C++ no tiene en cuenta los decimales y se queda con el entero, en este caso 24.
Cosa lógica, creo yo, al declarar la variable comoint
.
Pero no termino de entender porqué eso mismo le afecta al iterador del bucle.