Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: TheMaker en 3 Noviembre 2010, 00:30 am



Título: C++ o Python, cual de los dos se equivoca!?
Publicado por: TheMaker en 3 Noviembre 2010, 00:30 am
Tengo dos códigos, q hacen lo mismo (o es creo)

el de c++

Código
  1. #include<iostream>
  2. using namespace std;
  3.  
  4. int re(int nu){
  5.    if(nu==0)
  6.            return 0;
  7.    if(nu==1)
  8.            return 1;
  9.    return 3*re(nu-1)+4*re(nu-2);
  10.    }
  11. int main(){
  12.    cout<<re(1);
  13.    }

y el de python

Código
  1. def r(n):
  2. if n==0:
  3. return 0
  4. if n==1:
  5. return 1
  6. return 3*r(n-1)+4*r(n-2)

hasta r(16) dan los mismos resultados, pero a partir de ahí cada uno dice una cosa distinta, además c++ peta en cuanto se sube de r(20) mientras que python... llega a valores superiores a r(900) :O (copón bendito)

pues bien, usando el máxima (una copia libre del mathematica) he comprobado que python es el que lleva razón, alguien sabe porque c++, un leguaje que se supone supereficiente en comparación con un leguaje como python, se equivoca(para valores altos) en cálculos matemáticos que python resuelve sin despeinarse???


Título: Re: C++ o Python, cual de los dos se equivoca!?
Publicado por: do-while en 3 Noviembre 2010, 01:13 am
¡Buenas!

Eso que describes me suena al rango de valores que puede tomar una variable de tipo int. Imprimitete por pantalla sizeof(int), lo multiplicas por 8 y eleva 2 al resultado que de en la calculadora. Luego dividelo por 2 y ese sera el entero mas grande que puedas utilizar en c++.

Por ejemplo, si sizeof(int) = 4 -> 8 * 4 = 32 -> 2^32 = 4.294,967.296 (Este sera el unsigned int mas alto que podras utilizar (realmente le tienes que restar uno)) y 4.294,967.296 / 2 - 1 = 2.147,483.647 Es el int mas alto que puedes utilizar.

Por lo que dices, la forma en la que python maneja enteros es distinta. Puede utilizar enteros arbitrariamente grandes.

En C++ esto lo puedes simular tu con una clase que maneje enteros todo lo grandes que quieras, por ejemplo, utilizando vectores de enteros. Luego, evidenemente, tendra que formatear la entrada y la salida, sobrecargar operadores...

¡Saludos!

PD: en limits.h, te salen los limites de los tipos enteros.


Título: Re: C++ o Python, cual de los dos se equivoca!?
Publicado por: flony en 3 Noviembre 2010, 02:08 am
 ;) por eso estudio los dos... ;D ;D y no me voy de todo del scripting


Título: Re: C++ o Python, cual de los dos se equivoca!?
Publicado por: EvilGoblin en 7 Noviembre 2010, 16:25 pm
los 2 (c++ y python) son muy eficientes mientras los sepas usar =).


Python es una fuente de programacion rapida para tareas sencillas y a medida que la complicas se hace poco menos legible y mas desordenado.

Encambio C++ no cambia su dificultad desde el "Hola Mundo" hasta hookeos y mutex xD..

tenes que usar double int



Título: Re: C++ o Python, cual de los dos se equivoca!?
Publicado por: Littlehorse en 7 Noviembre 2010, 16:49 pm
tenes que usar double int

double int? :xD

Citar
C tiene los siguientes tipos fundamentales:

    * Caracteres: char (también es un entero), wchar_t
    * Enteros: short int, int, long int, long long int
    * Números en coma flotante: float, double, long double
    * Vacío: void


Título: Re: C++ o Python, cual de los dos se equivoca!?
Publicado por: EvilGoblin en 8 Noviembre 2010, 18:11 pm
xD cierto long int :P
lo siento xD