Ver Mensaje Individual
  #9 (permalink)  
Antiguo 23/09/2010, 01:38
Fw190
 
Fecha de Ingreso: junio-2010
Ubicación: Madrid
Mensajes: 620
Antigüedad: 14 años, 5 meses
Puntos: 73
Respuesta: Pintar DOUBLE y LONG

No indicas qué compilador ni sistema operativo utilizas, esa información puede ayudar a concretar mejor una respuesta.

En los compiladores para sistemas de 32 y 64 bits (prácticamente todos los actuales), el tipo int y el tipo long son el mismo (enteros de 32 bits), y si quieres un entero de 16 bits debes declararlo explícitamente como short.

En los compiladores para sistemas de 16 bits, el tipo int es de 16 bits, el mismo que el tipo short, y si quieres un entero de 32 bits debes declararlo explícitamente como long.

En cuanto a los tipos de coma flotante, son igual en ambos: Precisión simple (float, 32 bits) y precisión doble (double, 64 bits).

En los sistemas de 32 bits, dado que ahora la memoria es barata y abundante, y los procesadores muy potentes, de cara al almacenamiento y operación no vale la pena emplear enteros de 16 bits, ya que para operar con ellos los "promocionará" a 32 bits y los "degradará" a 16 bits una vez finalizada la operación. De cara a la memoria ocupada, por temas de organización interna, y dependiendo del compilador, ocuparán 2 ó 4 bytes (aunque sólo necesiten 2).

En cunto a los tipos de coma flotante, de cara a la velocidad de operación da lo mismo. Ahora las CPU llevan integrado el procesador de coma flotante, y los datos (tanto float como double) se "promocionan" a tipos internos que tienen aún más rango y precisión. Las diferencias las vas a encontrar en la precisión de los cálculos (ten en cuenta que, después de la operación, hay una "degradación" en la que se pierde información). Ciertamente, el tipo double ocupa el doble de memeoria, pero en los sistemas actuales es raro que eso sea un problema, y si necesitas mucho cálculo numérico se nota la precisión (vas perdiendo información conforme acumulas más cálculos).

Sobre el desbordamiento de ese contador, repasa bien tu código. Si antes funcionaba bien y ahora no, en alguna perte debe haber un cambio que no has hecho, o que no tenías que haber hecho, o alguna conversión de tipos que, después del cambio, te está fastidiando.

Resumiendo: Si tienes un compilador para 32/64 bits:
- Te da lo mismo int que long (y los correspondientes unsigned).
- Utiliza double, ganas precisión, no pierdes velocidad, y difícilmente la memoria será un problema.