11111010111 1010 1011

Programar por Programar


¿Te gusta programar?
Inicio


BigFrac: Una estructura para manejar números fraccionarios de gran precisión

Estructura escrita en Visual Basic 2005 que usa internamente la de F#


Publicado: 22/Oct/2007
Actualizado: 22/oct/2007
Autor: Guillermo 'guille' Som


 

Contenido

Esta estructura sirve para trabajar con números fraccionarios, es decir, usa números al estilo de 1/3 en lugar de números de coma flotante como 0.3333, si es eso lo que buscas, puedes usar la estructura BigFloat.

Como todas las estructuras de esta librería, internamente se usa el tipo BigInt, en realidad, esta estructura usa dos valores de ese tipo, uno para la parte entera y otro para la fracción, por tanto, las cifras que puedes manejar son muy, muy grandes.

Como ya comenté en la estructura "prima hermana de esta" pero que usa por debajo los números enteros de LibTomMath, de forma predeterminada los números se simplifican, de forma que si indicas el número 20/6 al final se quedará en la fracción 10/3 y si la fracción que indicas, es 20/4 al final se quedará en 5.

Si no deseas ese comportamiento, es decir, no deseas que se simplifiquen las fracciones, tendrás que asignar un valor False a la propiedad (en realidad es un campo público) SimplificarOperaciones.

Ese campo está compartido, por tanto, no tendrás que asignarlo en cada objeto que crees, sino que al asignarle un valor se usará globalmente por todas las estructuras que tengas en memoria.

De forma independiente, existe otro campo que se usa para simplificar las operaciones cuando se hacen comparaciones, de forma que aunque el valor del campo que te acabo de comentar tenga un valor False, las comparaciones se hagan de forma correcta, ya que 20/6 es lo mismo que 10/3 por tanto, al comparar si son iguales debería dar un valor verdadero.
Pero si quieres hacer las cosas a tu aire, puedes asignar un valor falso al campo compartido SimplificarOperacionesComparacion, de esa forma, no se simplificarán las comparaciones, aunque si el valor de SimplificarOperaciones es True, no hará falta que cambies nada, ya que los valores almacenados se simplificarán y por tanto no deberías tener problemas.

En cualquier caso, no te fíes de usar estas dos propiedades compartidas, ya que es posible que en un futuro las deje siempre como True y no permita el cambio del valor.

 

He de aclarar que el F# existe una estructura como esta, que se llama BigNum, pero que yo no estoy usando, salvo para realizar ciertas operaciones, aunque no todas. En realidad, esta estructura usa casi el mismo código que la que hice para la otra librería que usa LibTomMath.

 

Pulsa aquí si quieres ver el código fuente para Visual Basic 2005 de la estructura BigFrac.

 


Programar por programar... ¡porque te gusta programar!
Ir al índice principal
Ir al sitio del Guille - Ir a los foros del Guille

Has entrado usando el host programarporprogramar.org