Herramientas de usuario

Herramientas del sitio


curso-cpp:mas-tipos

Diferencias

Muestra las diferencias entre dos versiones de la página.

Enlace a la vista de comparación

Ambos lados, revisión anterior Revisión previa
Próxima revisión
Revisión previa
curso-cpp:mas-tipos [2017/10/29 19:19]
santo
curso-cpp:mas-tipos [2017/11/26 22:39] (actual)
guty [Tipo de un literal entero]
Línea 41: Línea 41:
 Es decir, las versiones ''​unsigned''​ ocupan la misma memoria que sus correspondientes con signo, no permiten negativos, y a cambio llegan hasta números aproximadamente el doble de grandes como límite superior. La tabla de potencias de diez máximas representables es igual que antes, excepto que en ''​unsigned long long''​ ahora entra el número $10^{19}$, mientras que en ''​long long''​ solo se puede representar hasta $10^{18}$. Es decir, las versiones ''​unsigned''​ ocupan la misma memoria que sus correspondientes con signo, no permiten negativos, y a cambio llegan hasta números aproximadamente el doble de grandes como límite superior. La tabla de potencias de diez máximas representables es igual que antes, excepto que en ''​unsigned long long''​ ahora entra el número $10^{19}$, mientras que en ''​long long''​ solo se puede representar hasta $10^{18}$.
  
-===== Tipo de una literal entero =====+===== Tipo de un literal entero =====
  
 Cuando escribimos un número directamente en el código, como por ejemplo ''​x = y + 33;'',​ cabe preguntarse:​ ¿De qué tamaño es ese 33? Esto es importante para las cuentas intermedias,​ pues ese tipo define el tamaño del resultado. Por ejemplo, si hacemos ''​long long x = y + 1000000000;'',​ donde ''​y''​ es de tipo ''​int'',​ el resultado "​matemático"​ de la cuenta siempre entrará en el rango de ''​long long'',​ pero... ¿Es para la computadora el resultado de la cuenta un ''​long long''?​ Cuando escribimos un número directamente en el código, como por ejemplo ''​x = y + 33;'',​ cabe preguntarse:​ ¿De qué tamaño es ese 33? Esto es importante para las cuentas intermedias,​ pues ese tipo define el tamaño del resultado. Por ejemplo, si hacemos ''​long long x = y + 1000000000;'',​ donde ''​y''​ es de tipo ''​int'',​ el resultado "​matemático"​ de la cuenta siempre entrará en el rango de ''​long long'',​ pero... ¿Es para la computadora el resultado de la cuenta un ''​long long''?​
Línea 53: Línea 53:
 Similar problema tendremos si hacemos ''​long long x = y + z'',​ siendo tanto ''​y''​ como ''​z''​ variables de tipo ''​int''​. Podemos solucionarlo **convirtiendo** una de ellas a ''​long long'':​ ''​long long x = y + (long long)(z)'',​ de forma análoga a lo que hacíamos con el ''​LL''​ para los literales enteros. Similar problema tendremos si hacemos ''​long long x = y + z'',​ siendo tanto ''​y''​ como ''​z''​ variables de tipo ''​int''​. Podemos solucionarlo **convirtiendo** una de ellas a ''​long long'':​ ''​long long x = y + (long long)(z)'',​ de forma análoga a lo que hacíamos con el ''​LL''​ para los literales enteros.
  
-**El caso más común** donde esto ocurre es en la expresión: ''​1 << i''​ (que es común si se trabaja con [[cpp-avanzado:​bitmask|máscaras ​de bits]] de 64 bits): El resultado de esta operación será de tipo ''​int'',​ que no es lo que queremos si estamos trabajando valores de 64 bits. ''​1LL << i''​ resuelve por completo este problema.+**El caso más común** donde esto ocurre es en la expresión: ''​1 << i''​ (que es común si se trabaja con [[cpp-avanzado:​operaciones-de-bits|operaciones ​de bits]] ​con números ​de 64 bits): El resultado de esta operación será de tipo ''​int'',​ que no es lo que queremos si estamos trabajando valores de 64 bits. ''​1LL << i''​ resuelve por completo este problema.
  
 ===== Reglas prácticas para el manejo de tipos enteros ===== ===== Reglas prácticas para el manejo de tipos enteros =====
Línea 105: Línea 105:
 </​code>​ </​code>​
  
-Una característica de los números de punto flotante es que **no dan resultados exactos**. Si bien tienen una precisión de 15 dígitos y normalmente los resultados son muy buenos generalmente,​ incluso para operaciones muy sencillas, no se puede asumir que los resultados que dan serán exactos, sino que debemos considerar siempre que tienen un pequeño error.+Una característica de los números de punto flotante es que **no dan resultados exactos**. Si bien tienen una precisión de 15 dígitos y normalmente los resultados son muy buenos generalmente,​ incluso para operaciones muy sencillas, ​**no se puede asumir que los resultados que dan serán exactos**, sino que debemos considerar siempre que tienen un pequeño error.
  
 Esto queda claro con el siguiente ejemplo: Esto queda claro con el siguiente ejemplo:
Línea 147: Línea 147:
 </​code>​ </​code>​
  
-Vemos que, si bien los errores relativos son extremadamente pequeños (aparecen recién en la cifra 15), siempre están ahí, así que no podemos tratar a los números como absolutamente exactos en nuestro programa.+Vemos que, si bien los errores relativos son extremadamente pequeños (aparecen recién en la cifra 15), **siempre están ahí**, así que no podemos tratar a los números como absolutamente exactos en nuestro programa.
  
 === Otros tipos de punto flotante === === Otros tipos de punto flotante ===
curso-cpp/mas-tipos.1509304792.txt.gz · Última modificación: 2017/10/29 19:19 por santo