Tengo dos códigos, q hacen lo mismo (o es creo)
el de c++
#include<iostream>
using namespace std;
int re(int nu){
if(nu==0)
return 0;
if(nu==1)
return 1;
return 3*re(nu-1)+4*re(nu-2);
}
int main(){
cout<<re(1);
}
y el de python
def r(n):
if n==0:
return 0
if n==1:
return 1
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???
¡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.
;) por eso estudio los dos... ;D ;D y no me voy de todo del scripting
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
Cita de: EvilGoblin en 7 Noviembre 2010, 16:25 PM
tenes que usar double int
double int? :xD
CitarC 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
xD cierto long int :P
lo siento xD