no tiene sentido este simple código.

Iniciado por AprendiendoAProgramar, 25 Enero 2017, 23:35 PM

0 Miembros y 2 Visitantes están viendo este tema.

AprendiendoAProgramar

Esto no tiene sentido, se supone que debería dar el cuadrado de el numero pero siempre bota el numero -1.
Ejemplo:
5^2 = 24.                         .____.
.-. Por favor, ¿qué pasó? D: Soy nuub en esto.
no sé si será mi pc o que pasará.
Código (cpp) [Seleccionar]
#include <iostream>
#include <windows.h>
#include <cmath>



using namespace std;

int Cuadrado(int);


int main(){

    int Numero;


    cout<<" Ingrese Numero "<<endl;
    cin>>Numero;

    cout<<"El cuadrado del numero es: "<<Cuadrado(Numero)<<endl;


    system("pause");
  return 0;

}


int Cuadrado(int a){


    a = pow(a,2);

    return a;



}




· No se debe escribir en mayúsculas
>aquí las reglas del foro
-Engel Lex
APENAS EMPIEZO CON ESTO DE LA PROGRAMACIÓN Y CUANDO APARECEN ERRORES ES ALGO COMO........



(ES SOLO HUMOR)

engel lex

el código está bueno, a mi  (quetandole windows.h y system porque ando en linux) me funciona perfecto

como lo estás ejecutando?
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

AprendiendoAProgramar

APENAS EMPIEZO CON ESTO DE LA PROGRAMACIÓN Y CUANDO APARECEN ERRORES ES ALGO COMO........



(ES SOLO HUMOR)

engel lex

ya... es un lio de precisión de coma flotante...
https://es.wikipedia.org/wiki/Coma_flotante

los nuevos no se deberían dar con estos problemas pero eres desafortunado

qué pasa?

pow retorna un valor tipo double, pero por el asunto de la precisión en números de coma flotante, cuando haces pow(5,2) retorna 24.999999999 que a efectos de incluso otras cuentas matemáticas es 25.... pero cuando lo conviertes a int, el solo toma la parte entera y descarta los decimales, quedando en 24

http://www.cplusplus.com/reference/cmath/pow/
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

lgamerm

 
Cita de: AprendiendoAProgramar en 25 Enero 2017, 23:35 PM
Esto no tiene sentido, se supone que debería dar el cuadrado de el numero pero siempre bota el numero -1.
Ejemplo:
5^2 = 24.                         .____.
.-. Por favor, ¿qué pasó? D: Soy nuub en esto.
no sé si será mi pc o que pasará.
Código (cpp) [Seleccionar]
#include <iostream>
#include <windows.h>
#include <cmath>



using namespace std;

int Cuadrado(int);


int main(){

   int Numero;


   cout<<" INGRESE NUMERO "<<endl;
   cin>>Numero;

   cout<<"El cuadrado del numero es: "<<Cuadrado(Numero)<<endl;


   system("pause");
 return 0;

}


int Cuadrado(int a){


   a = pow(a,2);

   return a;



}




· No se debe escribir en mayúsculas
>aquí las reglas del foro
-Engel Lex


cambia esto: a = pow(a,2); por esto: a *= a;

MAFUS

Es muy raro. Tanto 5 como 25 tiene una cantidad muy baja de bits como para que se pierda información.

do-while

Cita de: MAFUS en 26 Enero 2017, 09:33 AM
Es muy raro. Tanto 5 como 25 tiene una cantidad muy baja de bits como para que se pierda información.
Nunca me he preocupado de los temas técnicos de los compiladores, pero puede que sea alguna particularidad del compilador que esté usando. Me acuerdo que cuando empecé a programar descubrí que distintos compiladores alineaban de forma distinta los campos de los structs (Borland y Mingw). Puede ser eso.
- Doctor, confundo los números y los colores.
- Vaya marrón.
- ¿Marrón? ¡Por el culo te la hinco!

engel lex

Cita de: MAFUS en 26 Enero 2017, 09:33 AM
Es muy raro. Tanto 5 como 25 tiene una cantidad muy baja de bits como para que se pierda información.

ellos la tendran... pero los float no... aquí un visualizador

https://float-visualizer.surge.sh/


5 = 01000000101000000000000000000000
25 = 01000001110010000000000000000000

mira la perdida de precisión tu mismo cuanto da 25?

en hecho, es más preciso 510423550381407695195061911147652317184 que 25 XD (por la mantissa)
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

MAFUS

Prueba el siguiente programa:
#include <stdio.h>

void bits(double n) {
    for(int b = sizeof(double) * 8 - 1; b >= 0 ; --b) {
        printf("%lu", *(long unsigned*)&n >> b & 1);
    }
}

int main() {
    printf("\n\n%.25lf\n", 0.1);
    bits(0.1);
   
    printf("\n\n%.25lf\n", 5.);
    bits(5);
   
    printf("\n\n%.25lf\n", 25.);
    bits(25);
}


Como puedes ver no hay pérdida de precisión. En cambio si la hay en 0.1, que pasado a binario IEEE754:

0011111110111001100110011001100110011001100110011001100110011010

Como se puede ver hay una periodicidad que tiende a infinito.


AprendiendoAProgramar


Primero que todo muchas gracias por la ayuda. ;D ;-)


¿ Pero entonces el problema es mi compilador ? Y si es así.
¿ que tengo que hacer para que no suceda eso?

recién aprendo a programar y no quiero meterme en problemas tan técnicos como estos pero que al fin y al cabo influyen de manera importante al compilar un programa, si fuera un trabajo y me salieran estos errores no sabría corregirlos de manera correcta. Y no, no se vale sumarle la cantidad que le falte.  :xD :xD

GRACIAS.
APENAS EMPIEZO CON ESTO DE LA PROGRAMACIÓN Y CUANDO APARECEN ERRORES ES ALGO COMO........



(ES SOLO HUMOR)