C++ o Python, cual de los dos se equivoca!?

Iniciado por TheMaker, 3 Noviembre 2010, 00:30 AM

0 Miembros y 1 Visitante están viendo este tema.

TheMaker

Tengo dos códigos, q hacen lo mismo (o es creo)

el de c++

Código (c++) [Seleccionar]
#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

Código (python) [Seleccionar]
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???
Gibe money please or I report you

do-while

#1
¡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.
- Doctor, confundo los números y los colores.
- Vaya marrón.
- ¿Marrón? ¡Por el culo te la hinco!

flony

#2
 ;) por eso estudio los dos... ;D ;D y no me voy de todo del scripting
si un problema no tiene solucion entonces no es un problema...es algo inevitable

EvilGoblin

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

Experimental Serial Lain [Linux User]

Littlehorse

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
An expert is a man who has made all the mistakes which can be made, in a very narrow field.

EvilGoblin

Experimental Serial Lain [Linux User]