rumigaculum.com

  • Aumentar tamaño del tipo
  • Tamaño del tipo predeterminado
  • Disminuir tamaño del tipo
Inicio Computación y cálculo numérico
Computación y cálculo numérico


Numerical integration at compile time

E-mail Imprimir PDF
(Article also published at codeproject on 2013-02-08)

Introduction

It is possible to carry out far from trivial calculations at compile time. As a sample, in this article I will show how to calculate the area under any real function between arbitrary boundaries A and B. I will use standard and widespread algorithms, like trapezoidal rule and Simpson’s rule.
Computing at compile time means that the result of the operation is known by the time the process is loaded in memory, before entering the main function.
 
Última actualización el Viernes, 22 de Febrero de 2013 12:13 Leer más...
 

A tester for strong exception guarantee in C++11

E-mail Imprimir PDF

(Article also published at codeproject on 2013-01-17)

Introduction

Have you ever wondered how robust your class templates are when faced with exceptions? If your answer is yes, this tester may help you. Adapted from a Matt Arnold's original idea, a variation of this technique is revamped here for its use with C++11 class templates.
We will first state the problem of the lack of strong safety before exceptions. Later we will give some tips on how to use the tester (you will see it is very straightforward). Finally, we will deepen in how it works and its possible drawbacks.

Última actualización el Lunes, 18 de Marzo de 2013 20:15 Leer más...
 

A lazy stream implementation in C++11

E-mail Imprimir PDF
(Article also published at codeproject on 2012-12-21)

Introduction

After attending a free introductory course on functional programming at Coursera I got fascinated by the power of lazy (non-strict) collections. I was taught the basic functioning of the Stream class in Scala (basically a simply linked list with non-strict evaluation). This was a radical change in my view on how collections could be structured and how their elements could be evaluated.

Coming from a mostly imperative world (as a C++ hobbyist), functional programming was an exotic mythical beast I was yearning to tame into a language I felt much more comfortable with.

Browsing in the Internet, my first inspiration came from Example 2 in this Louis Botterill's techy blog insightful post. In this example, Louis depicts a home-made but very inspiring imitation of the Scala Stream class. I took his design and tried to poured it into an equivalent C++03 class, with no success at all after several days. It was not until I moved to C++11 when I began to see the light at the end of the tunnel... But it is not yet time to show the innards of the resulting implementation.

Última actualización el Viernes, 18 de Enero de 2013 19:19 Leer más...
 

Clases contenedoras y seguridad ante excepciones en C++

E-mail Imprimir PDF

Introducción

Al desarrollar una biblioteca de clases o funciones que sabemos van a utilizar otros somos conscientes de la importancia de documentar su uso hasta donde mejor sepamos. Debemos ser especialmente cuidadosos en el diseño y la codificación, anticiparnos a posibles errores con que pueda encontrarse el usuario y construir una interfaz con el cliente lo más sencilla e intuitiva posible. Si lo que codificamos es una clase contenedora el ciudado debe extremarse aún más. Ahora no se trata sólo de una clase que pueden usar otros, sino que dicha clase a su vez usa las clases de terceras partes (objetos contenidos), cuya arquitectura puede ser variadísima y para nosotros siempre desconocida.

Es normal que en todos los libros de C++ o de cualquier otro lenguaje de programación se nos introduzca en los vericuetos del lenguaje mediante el diseño de una sencilla clase contenedora (una pila o stack suele ser el ejemplo más socorrido). Los buenos autores nos presentan los miembros y métodos característicos de dichas clases, y éstos se van desarrollando y cobrando sentido ante nuestros ojos. Finalmente, y cuando tras una larga lectura parece que todo está perfectamente acabado, se nos invita amablemente a tirar el trabajo a la papelera y a usar un contenedor estándar (de la Standard Template Library) para cualquier codificación de carácter profesional. El neófito entonces, muchas veces disgustado, suele atribuir dicha actitud a cierto celo profesional de los expertos del sector, o tal vez a la excesiva importancia que se da al mantra de no reinventar la rueda. Pero esto no es así. Conforme uno va adquiriendo más conocimientos y habilidades dentro de la programación en C++ se va dando cuenta de lo verdaderamente intrincado que es este lenguaje de programación y de los innumerables escollos que debemos salvar para construir un código como mínimo aceptable. No se trata de evitar la reinvención de la rueda, sino de hacernos ver que nuestras primeras ruedas de seguro serán cuadradas.

Última actualización el Jueves, 03 de Enero de 2013 20:34 Leer más...
 

Círculo de Error Probable

E-mail Imprimir PDF

Introducción

Cuando trabajamos con variables aleatorias que representan un error cometido (por ejemplo en un proceso de medición), solemos caracterizar la dispersión de dicho error mediante una estimación de la varianza o, más comúnmente, de la desviación típica.
Cuando la variable aleatoria es bidimensional, una imagen más intuitiva de su dispersión la podemos obtener calculando el círculo que, centrado en el punto de error cero, encierra el 50% de nuestras mediciones.
Un ejemplo típico es el de un arquero disparando sus flechas contra una diana. Aunque éste siempre apunta al centro de la diana, la falta de pericia, el cansancio o las condiciones atmosféricas hacen que la flechas se distribuyan por toda la diana, no sólo en el centro. Podemos dar una medida de cuán bueno es el arquero si damos la desviación típica de los puntos de impacto en dos ejes perpendiculares (el horizontal y el vertical, por ejemplo). No obstante nos resultaría más gráfico si se nos informara del radio del círculo que, con centro en el centro de la diana, contiene el 50% de los impactos. Si este círculo es pequeño es porque las flechas están muy agrupadas en torno al oro de la diana y podemos afirmar por ende que el arquero es bueno.

Última actualización el Viernes, 15 de Octubre de 2010 16:57 Leer más...
 

Georreferenciación, conversión de coordenadas y cálculo de distancias y azimuts geográficos

E-mail Imprimir PDF

Introducción

La georreferenciación de puntos sobre la superficie terrestre no es asunto baladí. Ya sólo para adquirir un conocimiento meramente superficial (como el que he podido adquirir), es necesario consultar fuentes variadas en Internet, a veces confusas y oscuras cuando no contradictorias entre sí. Este artículo no debe verse como una introducción a la materia en cuestión, sino como un índice de la fuentes de información que, consultadas de una manera ordenada, pueden hilvanar una primera toma de contacto con la georreferenciación de puntos geográficos.

Esta toma de contacto ha sido, por otra parte, más que suficiente para elaborar el proyecto GeoLocation, que nos permitirá manipular coordenadas geográficas (en notación geodésica y UTM), así como medir la distancia entre dos puntos geográficos y los ángulos respecto del norte (o azimuts) del segmento curvo que une tales puntos sobre el elipsoide considerado.

Para el que no tenga ningún conocimiento previo sobre el asunto, el párrafo anterior le ha podido resultar ya demasiado intimidatorio. No debe preocuparse empero: voy a dar las referencias necesarias (más una serie de comentarios que considero aclaratorios) con objeto de que todo lo anterior se entienda suficientemente.

Última actualización el Sábado, 12 de Enero de 2013 11:48 Leer más...
 


Página 1 de 2