jueves, agosto 20, 2009

Del como prevenir un error de coma flotante y del como un issue pasó por SAP, Intel y Microsoft

Meses atrás me informaron de un dump que le ocurrió a una usuaria mientras trabajaba con la transacción SAP que diseñamos para el manejo de modelos econométricos.

El problema se presentaba al momento de calcular un antilogaritmo para un número con exponente muy pequeño, por ejemplo: 10^-900 lo cual normalmente cualquier mortal lo entendería como un valor positivo muy cercano a cero, pero bueno, SAP no.

En el análisis de errores para ese dump, SAP nos indicaba lo siguiente:

There may be an overflow or an underflow.
With the floating point format defined according to IEEE 754 and widely used on workstations, the following must apply for "x **y": -709 < y * ln x < 710


A lo cual nosotros procedimos a implementar la fórmula tal como venía entregada sin mayor análisis ni revisión.

Tiempo después volvió a ocurrir el mismo error al intentar calcular 10^-307.655 a lo cual aplicamos la regla de SAP teniendo lo siguiente
y * ln x = -307.55 * ln 10 = -708.4018168
-709 < y * ln x < 710 = VERDADERO
al satisfacerse la regla y decidimos consultar a SAP sobre que estaba pasando y por qué se daba tal error si se estaba cumpliendo la regla establecida.

Parte del mensaje y algunos errores adicionales pueden ser verificados aquí.

El issue fue inicialmente tratado por SAP quien recomendó que aplicáramos un redondeo antes del cálculo, esto bajo una idea errada que el número internamente se almacenaba en un formato tal como -3.07549999999999999E+02 lo cual se implementó pero no sirvió de nada.

Al cabo de un tiempo me enteré que el tema lo veía Microsoft (imagino por un vínculo al Sistema Operativo) quien me indicó que se trataba de un problema de trabajar con un resultado del tipo número subnormal (denormal number) el cual al trabajarse en un procesador Itanium, de acuerdo a Intel, se realizaba 100 veces más lento que con un número de coma flotante normalizado y que existía la opción de que automáticamente Itanium lo volviera cero lo cual es más rápido aún cuando se pierde precisión.

Me indicaron que se iba a presentar el caso a Microsoft ya que a la fecha ningún compilador Microsoft tenía la capacidad de hacer esa conversión automática en procesadores Itanium.

Aún cuando el problema a la fecha sigue estancado ya que siguen buscando a alguien que conozca sobre Itanium, decidí enfocarme en el problema inicial que tenía ya que aún con todo lo que me indicaba tenía pensado que una buena validación podría prevenir el error (y que la actual de SAP no lo permitía).

Afortunadamente Jason Kafka tuvo a bien revisar la regla que SAP provee y luego nutrirme de cierta teoría que involucra al estándar IEEE 754 para aritmética de coma flotante. Y que establece los límites para cada caso dependiendo el número de bits; en este caso Itanium trabaja con 64 bits.

Para este caso el exponente más alto y más bajo con representación disponible son 1023 y -1022 respectivamente (si la base es 2).

Luego decidí hacer gala de mis antiguos conocimientos de matemáticas y planteé lo siguiente:

2^-1022 <= x^y <= 2^1023

aplicando logaritmo natural/neperiano a cada miembro de la expresión...
-1022 * ln(2) <= y * ln(x) <= 1023 * ln(2)

lo cual resulta aproximadamente en:
-708.3964185 <= y * ln(x) <= 709.0895657

Es decir la regla que daba SAP era aproximada y era la causa de todos los males, en este caso lo único que se tenía que hacer era colocar las cotas adecuadas y así prevenir el dump.


En este momento SAP, Microsoft e Intel siguen trabajando en este tema, por mi lado creo ya tenerlo (si no solucionado) al menos controlado.

Sin embargo descuido mío fue el no verificar las cotas máximas o el no relacionar inmediatamente el por qué del componente central de la desigualdad "y * ln(x)", pues al parecer con el mismo razonamiento anterior es como SAP llegó a la conclusión de la regla (aproximada) de desigualdad que si bien falla en los casos extremos, contempla un amplio rango de casos, tal como lo manifestó el consultor alemán de Plataformas de Desarrollo Microsoft.

viernes, agosto 14, 2009

Cambio de precios en dúos y tríos

Me recortaron 10 soles de mi descuento "promocional" por dúo, entiendo que a los que tienen adicionalmente cable el incremento es de 20 soles.

Bueno, el problema de tener un producto descontinuado (Tarifa Plana + Speedy de 500) y de haberlo contratado con una empresa, que como muchas, te endulza con un descuento y luego sin mayor explicación te lo quita.

Si bien llegó una cartita, no se indica a qué se debe este incremento en el precio.
Ya le mandé un correo a Rainer Spitzer a ver que me dice (rspitzerch@tp.com.pe)

miércoles, agosto 05, 2009

Así que su madre quería que fuera doctor ¿pero en Investigación de Operaciones?

Era el año de 2000 y quería compartir un artículo del año 1972 , que manifestaba un diálogo entre un estudiante aspirante a doctorado y un doctor en Investigación de Operaciones, el estudiante le comparte sus temores respecto a si debería o no seguir un doctorado en esa área de la ciencia al parecer recien emergente para aquel entonces.

Sin embargo es un tema interesante, digno de ser revisado por un profesional de esa carrera como docente. Lo compartí por primera vez con mis compañeros de la Universidad, allá por el año 2000, ahora lo comparto con todos.

La carta que da origen al artículo decía lo siguiente:

Estimado señor Halbretch:

Acabo de terminar mi primer año en Harvard College, donde estoy especializándome en Matemáticas Aplicadas a la Economía y ahora estoy por decidir si hacer el doctorado en investigación de operaciones. Sin embargo, antes de tomar cualquier decisión, me gustaría saber más acerca de las oportunidades de contratación en la investigación de operaciones y campos relacionados, es decir, economía, econometría, ingeniería de sistemas y otros. ¿Podría proporcionarme, por favor, una lista de las oportunidades actuales de contratación para el área del Noreste en estos campos?

Además, apreciaría mucho que me diera una idea respecto al salario inicial de un doctor en investigación de operaciones y campos relacionados, así como la rapidez con que avanzan los salarios, ¿Cuál es el salario promedio después de 15 años de experiencia? ¿Cuál es mercado actual de trabajo para personal en investigación de operaciones y campos relacionados? ¿Cuál cree que sea la oportunidad del mercado de trabajo para estos campos en el futuro?

Agradeceré mucho toda la información que me pueda proporcionar.



Para leer lo que sigue, haga clic aquí