jueves, 26 de noviembre de 2015

T2. LAS FUNCIONES INT() Y FLOAT(). CUANDO LA PRECISIÓN ES UN GRADO.

LÍQUENES SOBRE LA ROCA. MONTE DEL AGUA. NORTE DE TENERIFE
     La función int() convierte, cuando sea posible, cualquier argumento que le pasemos en un número entero. Para ello es necesario introducir dígitos y no letras. Puede ser un mismo número entero o un número cualquiera siempre que esté en base 10. No ofrece redondeo por sí mismo devolviendo, cuando pasamos un float(), tan sólo el entero (a la izquierda del punto) y eliminando los decimales (a la derecha del punto). La función int() sólo admite un argumento.   



La función float() desarrolla un trabajo similar al de la función int() y con similares limitaciones, en este caso, para los decimales.




Normalmente, no necesitamos, valga la expresión, "rizar el rizo" cuando escribimos un decimal o esperamos recibirlo como resultado de la ejecución de un código. Pero cuando necesitamos escribir o recibir resultados más exactos para efectuar cálculos que requieran de una elevada precisión (pongamos por caso, la trayectoria milimétrica de un microsatélite entre órbitas, la cantidad exacta de radioterapia para eliminar un melanoma antes de que crezca demasiado con el mínimo perjuicio para el paciente, o las dimensiones en armstrongs de una arqueobacteria o un retrovirus, cálculos científicos, vamos), podemos apoyarnos en el módulo 'decimal' que nos ofrece números decimales que se mostrarán con la exactitud que especifiquemos.
Veamos un ejemplo de su funcionamiento:



Los números decimales se crean utilizando la función decimal.Decimal(). Es importante tener en cuenta que esta función puede tomar como argumento un número INT, como en el argumentado de la función asignado a la variable x, o una cadena literal o string, STR, como en el argumentado de la función asignado a la variable y, pero no un valor de tipo FLOAT.

EL PEÑÓN DE GARACHICO Y LA VILLA HOMÓNIMA

      Todas las operaciones aritméticas simples (sumas, restas, multiplicaciones, divisiones, etc.), las funciones aritméticas así como la asignación aumentada, son susceptibles de ser utilizadas con la función decimal.Decimal() con las siguientes restricciones:
A) Si el operador aritmético ** tiene un operando en el lado izquierdo (a**b, sería a) decimal.Decimal(), su operando del lado derecho (b, en nuestro caso) tendrá que ser un entero. Por concomitancia, si el primer argumento de la función pow() es decimal.Decimal(), entonces su segundo y el tercero (recordemos que éste último es opcional) tendrán que ser también enteros.
Veamos un pequeño ejemplo a continuación:




B) Los módulos 'math' y 'cmath' de la librería estándar de Python no resultan apropiados para utilizarlos con la función decimal.Decimal().
El tipo de datos decimal.Decimal funciona en el ámbito que impone la precisión numérica que queramos conseguir, y cuyo valor por defecto es de nada menos que 28 posiciones decimales. Podemos emplear técnicas de redondeo si lo consideramos oportuno mediante la función integrada round().
Pongamos un ejemplo de uso:


   
COSTA NORTE DE ANAGA, CON LA PUNTA DEL HIDALGO AL FONDO.

Respuesta a la pregunta de jhonato:

SCRIPT:


RESULTADO:


Para que quede más correcto, aquí te muestro el mismo script optimizado para incluir los años bisiestos. Fíjate como el resultado final cambia habiendo introducido la misma fecha de nacimiento en ambos casos, con la inclusión de los bisiestos:

SCRIPT:



* Resultado con la aplicación de una fecha nueva: